1 / 21

Pointers

Pointers. (Walls & Mirrors - Beginning of Chapter 4). What’s a Pointer?. A pointer variable is a variable that can contain the location of another variable as its value. The location of a variable is usually implemented by indicating its address in (RAM) memory.

Télécharger la présentation

Pointers

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 (Walls & Mirrors - Beginning of Chapter 4)

  2. What’s a Pointer? • A pointer variable is a variable that can contain the location of another variable as its value. • The location of a variable is usually implemented by indicating its address in (RAM) memory. • The location (or address) of a variable is called a pointer. • Sometimes, for brevity, a pointer variable is simply called a pointer. You will need to be careful to understand whether pointer refers to a variable or the address of a variable.

  3. Pointers -“Real Life” Examples • Suppose that your friend, Sam, borrows your copy of Walls & Mirrors. In its place, he leaves you the note Borrowed your Walls & Mirrors book. Thanks, Sam • This note is like a pointer, since it it not your book, but it tells you where to go to find it. (The paper on which the note is written is like a pointer variable.)

  4. Pointer variable Other variable Pointers - Graphical Representation • A variable is often represented as a box. • The value of the variable is written inside the box. • If the variable is a pointer variable, containing a pointer, the box will contain the “tail” of an arrow that points to another variable.

  5. Pointers - Suggestion • If you have a problem with pointers, draw the layout. • It may be difficult to understand what is going on without a graphical representation of the pointer relationships.

  6. Pointer Declarations int *iptr; // iptr is a pointer to an int char *cptr; // cptr is a pointer to a char float *fptr; // fptr is a pointer to a float List *Lptr; // Lptr is a pointer to a List object Sphere *Sptr; // Sptr is a pointer to a Sphere object

  7. Pointer Operations • Assignment: = • A pointer variable can be assigned only a pointer (i.e. the address of a variable) or NULL (which equals 0). • Comparison: = =, != • Pointers can be compared for equality. • Addition/Subtraction: +,  • Pointers can be incremented or decremented with an integer. • Dereferencing: * • *ptr returns the value of the object pointed to by ptr. • Address of: & • &ptr returns the address of ptr (i.e. pointer to ptr).

  8. Pointer Operations - Address of • The Address of operator & returns the address of an object. float PI = 3.14159; float *PIptr; &PI returns the address of the variable PI,not 3.14159 (the value stored in PI). PIptr = &PI stores the address of variable PI in variable, PIptr. &PIptr returns the address of variable PIptr.

  9. Pointer Operations - Dereferencing • The Dereferencing operator * returns the value of the object to which its operand points. float PI = 3.14159; float *PIptr; float X; PIptr = Π // PIptr contains the address of PI X = *PIptr; // Value stored in PI (3.14159) is // assigned to X *(*(&PIptr)) = *PIptr = *(&PI) = PI = 3.14159

  10. Pointer Initialization int *ptr; // pointer to int declared, value undefined int x = 5; // int declared and initialized to 5 cout << x; // prints 5 cout << *ptr; // Error! Prints undefined value, since ptr not // initialized ptr = &x; // ptr now contains the address of x cout << *ptr; // prints 5

  11. Pointer Initialization - Suggestion • When a pointer variable is declared it is (by default) uninitialized. Therefore, where it is pointing is undefined. • It’s a good practice to initialize newly declared pointer variables to the NULL pointer (= 0). • This will insure that the pointer variable is not pointing anywhere it shouldn’t. • This will help you determine if a valid pointer has been assigned to it. if( ptr = = NULL ) cout << “ptr has not been initialized” << endl;

  12. ptr new int variable new Operator • The operator new creates a new object of a given type. • new returns a pointer to the newly created object. ptr = new int;

  13. new Operator (Cont’d.) • An object created with new does not have a name and is not declared. • An object created with new can only be used by following (dereferencing) a pointer to it. • You need to be careful to not lose the pointer to an object created with new, since there is no other way to access it. • Memory that was allocated with new and has become inaccessible is called a memory leak. • For programs that run for long periods of time, memory leaks can be the reason for system failure.

  14. new Operator - Example 1 int *ptr; // pointer to int declared, value undefined *ptr = 5; // Error! ptr contains invalid address and // space for int not allocated ptr = new int; // space for int allocated and pointer to it // assigned to ptr *ptr = 5; // 5 is stored in the int pointed to by ptr

  15. new Operator - Example 2 int *p, *q; // declare two pointer to int variables p = new int; // allocate space for an int; make p point to it *p = 25; // store 25 in the int pointed to by p What is the effect of the following? q = p;

  16. p q new int 25 new Operator - Example 2 (Cont’d.) Draw a picture!

  17. new Operator - Example 3 int *p, *q; // declare two pointer to int variables p = new int; // allocate space for an int; make p point to it q = new int; // allocate space for an int; make q point to it *p = 35; // store 35 in the int pointed to by p What is the effect of the following? *q = *p;

  18. p q new int 35 35 new int new Operator - Example 3 (Cont’d.) Draw a picture!

  19. new Operator - Example 3 (Cont’d.) What would have happened if we had executed q = p; instead of *q = *p;

  20. p q new int 35 ? new int new Operator - Example 3 (Cont’d.) The new int, previously pointed to by q is LOST and cannot be recovered. This is called a memory leak.

  21. Arrays and Pointers int a[50]; int *aptr = a; a is equivalent to &a[0] aptr = a; is equivalent to aptr = &a[0]; aptr+5 is equivalent to &a[5] *(aptr+5) is equivalent to a[5]

More Related