PowerPoint Slides for Starting Out with C++: Early Objects

Download Report

Transcript PowerPoint Slides for Starting Out with C++: Early Objects

Starting Out with C++: Early Objects
5th Edition
Chapter 10
Pointers
Starting Out with C++: Early Objects 5/e
© 2006 Pearson Education.
All Rights Reserved
Copyright 2004
Scott/Jones Publishing
Topics
10.1 Getting the Address of a Variable
10.2 Pointer Variables
10.3 The Relationship Between Arrays
and Pointers
10.4 Pointer Arithmetic
10.5 Initializing Pointers
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 2
© 2006 Pearson Education.
All Rights Reserved
Topics (continued)
10.6 Comparing Pointers
10.7 Pointers as Function Parameters
10.8 Dynamic Memory Allocation
10.9 Returning Pointers from Functions
10.10 Pointers to Structures and Class Objects
10.11 When to Use ., When to Use ->, and
When to Use *
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 3
© 2006 Pearson Education.
All Rights Reserved
10.1 Getting the Address of a
Variable
• Each variable in program is stored at a
unique address
• Use address operator & to get address
of a variable:
int num = -23;
cout << &num; // prints address
// in hexadecimal
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 4
© 2006 Pearson Education.
All Rights Reserved
10.2 Pointer Variables
• Pointer variable (pointer): variable that
holds an address
• Can perform some tasks more easily
with an address than by accessing
memory via a symbolic name:
– Accessing unnamed memory locations
– Array manipulation
– etc.
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 5
© 2006 Pearson Education.
All Rights Reserved
Pointer Variables
• Definition:
int
*intptr;
• Read as:
“intptr can hold the address of an int”
• Spacing in definition does not matter:
int * intptr;
int* intptr;
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 6
© 2006 Pearson Education.
All Rights Reserved
Pointer Variables
• Assignment:
int num = 25;
int *intptr;
intptr = &num;
• Memory layout:
num
intptr
25
0x4a00
address of num: 0x4a00
Can access num using intptr and indirection
operator *:
cout << intptr; // prints 0x4a00
cout << *intptr; // prints 25
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 7
© 2006 Pearson Education.
All Rights Reserved
10.3 The Relationship
Between Arrays and Pointers
• Array name is starting address of array
int vals[] = {4, 7, 11};
4
7
11
starting address of vals: 0x4a00
cout << vals;
// displays 0x4a00
cout << vals[0]; // displays 4
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 8
© 2006 Pearson Education.
All Rights Reserved
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
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 9
© 2006 Pearson Education.
All Rights Reserved
Pointers in Expressions
Given:
int vals[]={4,7,11};
int *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 ( ) in expression
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 10
© 2006 Pearson Education.
All Rights Reserved
Array Access
Array elements can be accessed in many ways
Array access
method
Example
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;
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 11
© 2006 Pearson Education.
All Rights Reserved
Array Access
• Array notation
vals[i]
is equivalent to the pointer notation
*(vals + i)
• No bounds checking performed on array
access
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 12
© 2006 Pearson Education.
All Rights Reserved
10.4 Pointer Arithmetic
• Some arithmetic operators can be used
with pointers:
- Increment and decrement operators ++, -- Integers can be added to or subtracted from
pointers using the operators +, -, +=, and -=
- One pointer can be subtracted from another
by using the subtraction operator Chapter 10 Starting Out with C++: Early Objects 5/e
slide 13
© 2006 Pearson Education.
All Rights Reserved
Pointer Arithmetic
• Assume the variable definitions
int vals[]={4,7,11};
int *valptr = vals;
• Examples of use of ++ and -valptr++; // points at 7
valptr--; // now points at 4
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 14
© 2006 Pearson Education.
All Rights Reserved
Pointer Arithmetic
• Assume the variable definitions:
int vals[]={4,7,11};
int *valptr = vals;
• Example of use of + to add an int to a
pointer:
cout << *(valptr + 2)
This statement will print 11
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 15
© 2006 Pearson Education.
All Rights Reserved
Pointer Arithmetic
• Assume the variable definitions:
int vals[]={4,7,11};
int *valptr = vals;
• Example of use of +=:
valptr = vals; // points at 4
valptr += 2;
// points at 11
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 16
© 2006 Pearson Education.
All Rights Reserved
Pointer Arithmetic
• Assume the variable definitions
int vals[] = {4,7,11};
int *valptr = vals;
• Example of pointer subtraction
valptr += 2;
cout << valptr - val;
This statement prints 2: the number of
ints between valptr and val
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 17
© 2006 Pearson Education.
All Rights Reserved
10.5 Initializing Pointers
• Can initialize to NULL
int *ptr = NULL;
• Can initialize to addresses of other variables
int num, *numPtr = &num;
int val[ISIZE], *valptr = val;
• Initial value must have correct type
float cost;
int *ptr = &cost; // won't work
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 18
© 2006 Pearson Education.
All Rights Reserved
10.6 Comparing Pointers
• Relational operators 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)
//
//
if (*ptr1 == *ptr2) //
//
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 19
compares
addresses
compares
contents
© 2006 Pearson Education.
All Rights Reserved
10.7 Pointers as Function
Parameters
• A pointer can be a parameter
• Works like a reference parameter to allow
change to argument from within function
• A pointer parameter must be explicitly
dereferenced to access the contents at
that address
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 20
© 2006 Pearson Education.
All Rights Reserved
Pointers as Function Parameters
• Requires:
1) asterisk * on parameter in prototype and
heading
void getNum(int *ptr);
2) asterisk * in body to dereference the pointer
cin >> *ptr;
3) address as argument to the function
getNum(&num);
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 21
© 2006 Pearson Education.
All Rights Reserved
Pointers as Function
Parameters
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int num1 = 2, num2 = -3;
swap(&num1, &num2);
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 22
© 2006 Pearson Education.
All Rights Reserved
10.8 Dynamic Memory
Allocation
• Can allocate storage for a variable while
program is running
• Uses new operator to allocate memory
double *dptr;
dptr = new double;
• new returns address of memory location
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 23
© 2006 Pearson Education.
All Rights Reserved
Dynamic Memory Allocation
• Can also use new to allocate array
arrayPtr = new double[25];
– Program terminates if there is not
sufficient memory
• Can then use [ ] or pointer arithmetic to
access array
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 24
© 2006 Pearson Education.
All Rights Reserved
Releasing Dynamic Memory
• Use delete to free dynamic memory
delete dptr;
• Use delete [] to free dynamic array
memory
delete [] arrayptr;
• Only use delete with dynamic memory!
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 25
© 2006 Pearson Education.
All Rights Reserved
10.9 Returning Pointers from
Functions
• Pointer can be return type of function
int* newNum();
• Function must not return a pointer to a
local variable in the function
• Function should only return a pointer
– to data that was passed to the function as
an argument
– to dynamically allocated memory
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 26
© 2006 Pearson Education.
All Rights Reserved
10.10 Pointers to Structures and
Class Objects
• Can create pointers to objects and
structure variables
Student stu1;
Student *stuPtr = &stu1;
Square sq1[4];
Square *squarePtr = &sq1[0];
• Need () when using * and .
(*stuptr).studentID = 12204;
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 27
© 2006 Pearson Education.
All Rights Reserved
Structure Pointer Operator
• Simpler notation than (*ptr).member
• Use the form ptr->member:
stuPtr->studentID = 12204;
squarePtr->setSide(14);
in place of the form (*ptr).member:
(*stuPtr).studentID = 12204;
(*squarePtr).setSide(14);
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 28
© 2006 Pearson Education.
All Rights Reserved
Dynamic Memory with Objects
• Can allocate dynamic structure
variables and objects using pointers:
stuPtr = new Student;
• Can pass values to constructor:
squarePtr = new Square(17);
• delete causes destructor to be
invoked:
delete squarePtr;
Chapter 10 Starting Out with C++: Early Objects 5/e
slide 29
© 2006 Pearson Education.
All Rights Reserved
Starting Out with C++: Early Objects
5th Edition
Chapter 10
Pointers
Starting Out with C++: Early Objects 5/e
© 2006 Pearson Education.
All Rights Reserved
Copyright 2004
Scott/Jones Publishing