Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-1 Pointer Variables Pointer variable : Often just called a pointer, it's.

Slides:



Advertisements
Similar presentations
Programming and Data Structure
Advertisements

Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
1 Pointers A pointer variable holds an address We may add or subtract an integer to get a different address. Adding an integer k to a pointer p with base.
Copyright © 2012 Pearson Education, Inc. Chapter 9: Pointers.
Chapter 9. 2 Objectives You should be able to describe: Addresses and Pointers Array Names as Pointers Pointer Arithmetic Passing Addresses Common Programming.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 10: Pointers by.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Copyright 2004 Scott/Jones Publishing Starting Out with C++: Early.
Review of pointers and dynamic objects. Memory Management  Static Memory Allocation  Memory is allocated at compiling time  Dynamic Memory  Memory.
Pointers A pointer is a variable that contains memory address as its value. A variable directly contains a specific value. A pointer contains an address.
Starting out with C++1 Chapter 9 – Pointers Getting the address of a Variable Why do we have pointers? Indirection – difference between –Will you go out.
Starting Out with C++, 3 rd Edition 1 Chapter 9 – Pointers.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
Pointers: Part I. Why pointers? - low-level, but efficient manipulation of memory - dynamic objects  Objects whose memory is allocated during program.
Review on pointers and dynamic objects. Memory Management  Static Memory Allocation  Memory is allocated at compiling time  Dynamic Memory  Memory.
Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Chapter 10: Pointers.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 9: Pointers.
1 Chapter 9 Pointers. 2 Topics 8.1 Getting the Address of a Variable 8.2 Pointer Variables 8.3 Relationship Between Arrays and Pointers 8.4 Pointer Arithmetic.
Programming Pointers. COMP104 Lecture 32 / Slide 2 Pointers l Pointers are objects whose values are the locations of other objects l Pointers are memory.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
Copyright © 2012 Pearson Education, Inc. Chapter 9: Pointers.
Lesson 9 Pointers CS 1 Lesson 9 -- John Cole1. Pointers in Wonderland The name of the song is called ‘Haddock’s Eyes’.” “Oh, that’s the name of the song,
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Modified by use by the MSU CMPS Dept. Chapter 10:
C++ Pointers Copies from SEE C++ programming course and from Starting Out with C++: Early Objects, 8/E by Tony Gaddis, Judy Walters and Godfrey Muganda.
Chapter 17 Pointers and Arrays. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers and Arrays.
Chapter 9 Pointers Fall 2005 Csc 125 Introduction to C++
Pointers Chapter 9. Getting The Address Of A Variable Each variable in program is stored at a unique address Use address operator & to get address of.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Dynamic Memory Allocation 9.8.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
CSC 2400 Computer Systems I Lecture 5 Pointers and Arrays.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 9: Pointers.
Pointers: Basics. 2 What is a pointer? First of all, it is a variable, just like other variables you studied  So it has type, storage etc. Difference:
Review 1 List Data Structure List operations List Implementation Array Linked List.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 9 Pointers and Dynamic Arrays.
Pointer. lvalues In C++, any expression that refers to an internal memory location is called an lvalue Appear on left side of assignment statement e.g.
1 2/2/05CS250 Introduction to Computer Science II Pointers.
Copyright © 2014 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
1  Lecture 12 – Pointer FTMK, UTeM – Sem /2014.
CS162 - Topic #12 Lecture: –Arrays with Structured Elements defining and using arrays of arrays remember pointer arithmetic Programming Project –Any questions?
Chapter 16 Pointers and Arrays Pointers and Arrays We've seen examples of both of these in our LC-3 programs; now we'll see them in C. Pointer Address.
Array and Pointers An Introduction Unit Unit Introduction This unit covers the usage of pointers and arrays in C++
Copyright © 2006 Pearson Addison-Wesley. All rights reserved Learning Objectives  Pointers  * symbol and & symbol  Pointer operations  Pointer.
A FIRST BOOK OF C++ CHAPTER 8 ARRAYS AND POINTERS.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter 7 Pointers and C-Strings.
Copyright © 2012 Pearson Education, Inc. Chapter 9: Pointers.
Pointers. Introduction to pointers Pointer variables contain memory addresses as their values. Usually, a variable directly contains a specific value.
C++ for Engineers and Scientists Second Edition Chapter 12 Pointers.
Pointers Lecture: 5. Topics 1 Pointers and the Address Operator 2 Pointer Variables 3 The Relationship Between Arrays and Pointers 4 Pointer Arithmetic.
CSCI 125 & 161 / ENGR 144 Lecture 16 Martin van Bommel.
Pointers: Basics. 2 Address vs. Value Each memory cell has an address associated with it
Pointers Data Structures CSI 312 CSI Dept. Dr. Yousef Qawqzeh.
Standard Version of Starting Out with C++, 4th Edition
Chapter 9: Pointers.
Lecture 9 Files, Pointers
Chapter 10: Pointers Starting Out with C++ Early Objects
Pointers and Pointer-Based Strings
INC 161 , CPE 100 Computer Programming
Pointer.
Chapter 10: Pointers Starting Out with C++ Early Objects Ninth Edition
Chapter 10: Pointers Starting Out with C++ Early Objects
Chapter 9: Pointers.
Object Oriented Programming COP3330 / CGS5409
Chapter 10: Pointers Starting Out with C++ Early Objects Ninth Edition
Chapter 9: Pointers.
Alternate Version of STARTING OUT WITH C++ 4th Edition
Pointers and Pointer-Based Strings
Standard Version of Starting Out with C++, 4th Edition
Pointers.
Presentation transcript:

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-1 Pointer Variables Pointer variable : Often just called a pointer, it's a variable that holds an address Because a pointer variable holds the address of another piece of data, it "points" to the data

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-2 Something Like Pointers : Arrays The values parameter, in the showValues function, points to the numbers array. C++ automatically stores the address of numbers in the values parameter.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-3 Something Like Pointers: Reference Variables We have also worked with something like pointers when we learned to use reference variables. Suppose we have this function: void getOrder(int &donuts) { cout > donuts; } And we call it with this code: int jellyDonuts; getOrder(jellyDonuts);

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-4 Something Like Pointers: Reference Variables The donuts parameter, in the getOrder function, points to the jellyDonuts variable. C++ automatically stores the address of jellyDonuts in the donuts parameter.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-5 Pointer Variables Pointer variables are yet another way using a memory address to work with a piece of data. Pointers are more "low-level" than arrays and reference variables. This means you are responsible for finding the address you want to store in the pointer and correctly using it.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-6 Pointer Variables Definition: int *intptr; Read as: “ intptr can hold the address of an int” Spacing in definition does not matter: int * intptr; // same as above

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-7 Pointer Variables Assigning an address to a pointer variable: int *intptr; intptr = # Memory layout: numintptr 25 0x4a00 address of num : 0x4a00

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-8 The Indirection Operator The indirection operator ( * ) dereferences a pointer. It allows you to access the item that the pointer points to. int x = 25; int *intptr = &x; cout << *intptr << endl; This prints 25.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley The Relationship Between Arrays and Pointers 9.3

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-10 The Relationship Between Arrays and Pointers Array name is starting address of array int vals[] = {4, 7, 11}; cout << vals; // displays // 0x4a00 cout << vals[0]; // displays starting address of vals : 0x4a00

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-11 The Relationship Between Arrays and Pointers Array name can be used as a pointer constant: int vals[] = {4, 7, 11}; cout << *vals; // displays 4 Pointer can be used as an array name: int *valptr = vals; cout << valptr[1]; // displays 7

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-12

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-13 Pointers in Expressions Given: int vals[]={4,7,11}, *valptr; valptr = vals; What is valptr + 1 ? It means (address in valptr ) + (1 * size of an int) cout << *(valptr+1); //displays 7 cout << *(valptr+2); //displays 11 Must use ( ) as shown in the expressions

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-14 Array Access Array elements can be accessed in many ways: Array access methodExample array name and []vals[2] = 17; pointer to array and []valptr[2] = 17; array name and subscript arithmetic *(vals + 2) = 17; pointer to array and subscript arithmetic *(valptr + 2) = 17;

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-15 Array Access Conversion: vals[i] is equivalent to *(vals + i) No bounds checking performed on array access, whether using array name or a pointer

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-16 From Program 9-7

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-17 Questions double list[3]; The address of the first element list &list[0] Each element has address, retrieved as? &list[i]

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Pointer Arithmetic 9.4

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-19 Pointer Arithmetic Addition and subtraction of pointers Fundamental insight of pointer arithmetic: –If p is a pointer to the initial element of an array arr, and k is an integer, then p + k is defined to be &arr[k] That is, adding an integer k to a pointer to an integer adds k * sizeof(int) to pointer

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-20 More Pointer Arithmetic If two pointers to integer p1 and p2 and an integer k have the relationship p2 == p1 + k Then p2 is exactly k * sizeof(int) larger than p1 and the result of subtracting the pointers p2 - p1 is the integer k

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-21 Recall ++ and -- Recall that x++ Calculates the value of x first and then increments it. Value returned is value before increment. ++x Increments value of x first and then uses new value as value of operation as a whole.

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-22 Incrementing pointers Consider the expression ( p is a pointer to int) *p++ dereferences the pointer and returns the object to which it points, but, as a side effect, point p to the next integer

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-23 Pointer Arithmetic Operations on pointer variables: OperationExample int vals[]={4,7,11}; int *valptr = vals; ++, -- valptr++; // points at 7 valptr--; // now points at 4 +, - (pointer and int ) cout << *(valptr + 2); // 11 +=, -= (pointer and int ) valptr = vals; // points at 4 valptr += 2; // points at 11 - (pointer from pointer) cout << valptr–val; // difference //(number of ints) between valptr // and val

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-24 From Program 9-9

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Initializing Pointers 9.5

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-26 Initializing Pointers Can initialize at definition time: int num, *numptr = &num; int val[3], *valptr = val; Cannot mix data types: double cost; int *ptr = &cost; // won ’ t work Can test for an invalid address for ptr with: if (!ptr)...

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Comparing Pointers 9.6

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-28 Comparing Pointers Relational operators ( =, etc.) can be used to compare addresses in pointers Comparing addresses in pointers is not the same as comparing contents pointed at by pointers: if (ptr1 == ptr2) // compares // addresses if (*ptr1 == *ptr2) // compares // contents

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Pointers as Function Parameters 9.7

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-30 Pointers as Function Parameters A pointer can be a parameter Works like reference variable to allow change to argument from within function Requires: 1) asterisk * on parameter in prototype and heading void getNum(int *ptr); // ptr is pointer to an int 2) asterisk * in body to dereference the pointer cin >> *ptr; 3) address as argument to the function getNum(&num); // pass address of num to getNum

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-31 Example void swap(int *x, int *y) {int temp; temp = *x; *x = *y; *y = temp; } int num1 = 2, num2 = -3; swap(&num1, &num2);

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-32 Pointers and Arrays The declaration int arr[5]; allocates space for an array of five integers The following identity holds arr  &arr[0] The function prototypes are equivalent double Average(int array[], int n); double Average(int *array, int n);

Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-33 Proper Declaration Arrays and pointers may be used interchangeably General rule: –declare parameters to reflect their usage If using arrays, declare arrays If using pointers, declare pointers