1 / 12

Pointers and References

Pointers and References. Computer memory consists of one long list of addressable bytes. A pointer is a data item that contains an address. :. 3FA71CF2 3FA71CF3 3FA71CF4 3FA71CF5 3FA71CF6 3FA71CF7 3FA71CF8 3FA71CF9 3FA71CFA 3FA71CFB 3FA71CFC 3FA71CFD 3FA71CFE 3FA71CFF 3FA71D00 3FA71D01.

nat
Download Presentation

Pointers and References

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pointers and References

  2. Computer memory consists of one long list of addressable bytes A pointer is a data item that contains an address : 3FA71CF23FA71CF33FA71CF43FA71CF53FA71CF63FA71CF73FA71CF83FA71CF93FA71CFA3FA71CFB3FA71CFC3FA71CFD3FA71CFE3FA71CFF3FA71D003FA71D01 3FA71CF6 3FA71CF6 : Machine addresses • A reference is a data item that contains an address • C has pointers, but Java has references • So what’s the difference?

  3. C (and C++) vs. Java • In C you can dereference (follow) a pointer • In Java you can dereference (follow) a reference • In C you can assign one pointer variable to another • In Java you can assign one reference variable to another • In C you can determine whether one pointer is larger than, equal to, or smaller than another pointer • In Java you can determine whether one reference is equal to another reference • In C you can create a pointer to anything • In Java you can have references to objects • In C you can do integer arithmetic on pointers

  4. References • Recall that an Abstract Data Type (ADT) has a set of values and a set of operations on those values • Pointers and references have the same set of values (memory addresses) • Pointers have more defined operations than references • Pointers are more flexible and more general than references • References are safer than pointers (from error or malicious misuse) • References allow automatic garbage collection (pointers don’t) • A (non-abstract) Data Type also has an implementation • The implementations of pointers and references are similar • Java references carry information about the thing referenced; in C, it’s up to the compiler to figure out what it can

  5. Data structures • Basically, pointers and references are the same thing; they point to (refer to) something else in memory • A Data Structure is a description of how data is organized in memory • Many (not all) data structures are built from objects pointing/referring to one another • Understanding pointers (references) is fundamental to this course • If this course were taught in C or C++ instead of Java, all the “nuts and bolts” would be the same • This course is in Java, but it’s not about Java • You need to know how to create your own data structures • I will also teach some Java-specific packages • In real life, it’s stupid to redo work that’s already been done for you

  6. "John" john namespouse "Mary" mary namespouse A trivial example • We use a lot of references in Java: • class Person { String name; Person spouse; Person (String n) { name = n; }}…Person john = new Person("John");Person mary = new Person("Mary");john.spouse = mary;mary.spouse = john;

  7. A binary tree is a data structure in which every node (object) has zero, one, or two children (references to other nodes) Arithmetic expressions can be represented as binary trees To evaluate an arithmeticexpression: If it is a leaf, return its value Otherwise, evaluate its two subtrees, and perform the indicated operation + / 7 null null 12 null 4 null null null A binary tree representing thearithmetic expression 12/4+7 A more serious example

  8. Binary trees in Java • public class BinaryTree { public Object value; // the information in this node private BinaryTree leftChild; private BinaryTree rightChild; // Constructors and methods...} • To make binary trees as useful as possible, we make the value in a node an Object • As implementers of the BinaryTree class, our job is to make sure that the structure of the binary tree is always valid • We don’t really care what the user puts in the value field

  9. Size of objects • Objects in Java have, generally speaking, a fixed size • The size of all primitives is known • Objects don’t actually “contain” other objects—they just have references to other objects, and a reference is 4 bytes • So what about Vectors? • A Vector is like an array, but it gets bigger as you put things into it • A Vector actually has two “sizes”—its capacity, which is how many references it can hold, and its size, which is how many references are in it right now • When you exceed the capacity of a Vector, Java creates a new Vector for you

  10. Suppose you have two references to a Vector, and you use one of them to add elements to the Vector What happens if Java decides to replace this Vector with a bigger one? It looks like the second reference is a “dangling pointer,” referring to nothing This doesn’t happen! Java protects you from this error But how? v1 v2 The magic of Vectors

  11. A reference to a Vector is actually a reference to a reference to a Vector In this way, the “real” reference has to be changed in only one place, and all the other, indirect references automatically work It’s clever, but it isn’t magic v1 v2 Vector’s secret trick

  12. The End

More Related