Professional Documents
Culture Documents
Topics
Pointers
Memory addresses
Declaration
Dereferencing a pointer
Pointers to pointer
Static vs. dynamic objects
new and delete
Pointers and dynamic objects/ Slide 3
Computer Memory
Each variable is assigned a memory slot (the
size depends on the data type) and the variable’s
data is stored there
… … 100 … … …
a
int a = 100;
Pointers and dynamic objects/ Slide 4
Addresses in Memory
When a variable is declared, enough memory to hold a
value of that type is allocated for it at an unused
memory location. This is the address of the variable
int x;
float number;
char ch;
Memory
address ===> 2000 2002 2006
Variables: x number ch
4
Pointers and dynamic objects/ Slide 5
Pointers *
Pointers and dynamic objects/ Slide 6
Pointers
A pointer is a variable used to store the
address of a memory cell.
We can use the pointer to reference this
memory cell
… … 100 … 1024 …
integer
pointer
Pointers and dynamic objects/ Slide 7
Pointer Types
Pointer
C++ has pointer types for each type of object
Pointers to int objects
Pointers to char objects
Pointers to user-defined objects
(e.g., RationalNumber)
Even pointers to pointers
Pointers to pointers to int objects
Pointers and dynamic objects/ Slide 8
8
Pointers and dynamic objects/ Slide 9
Pointer Variable
Examples:
int *n;
RationalNumber *r;
Example
int x; 1:
float number;
char ch;
11
Pointers and dynamic objects/ Slide 12
… … 90 … …
100
200 …
a b c
Example 2:
Pointers and dynamic objects/ Slide 13
Pointer *
Address operator &
Pointers and dynamic objects/ Slide 14
Pointers and dynamic objects/ Slide 15
Example 3:
Pointers and dynamic objects/ Slide 16
Pointers and dynamic objects/ Slide 17
Example 4:
Pointers and dynamic objects/ Slide 18
Example 5:
Pointer Variables
Memory address: 22fe44 22fe48
… 100 … 22fe44 …
a p
Example 5:
Pointers and dynamic objects/ Slide 20
Example 6:
Pointers and dynamic objects/ Slide 21
Example 7:
Pointers and dynamic objects/ Slide 22
Example 8:
Pointers and dynamic objects/ Slide 23
Example 10:
Pointers and dynamic objects/ Slide 26
Example 11:
Pointers and dynamic objects/ Slide 27
Example 12:
Pointers and dynamic objects/ Slide 28
Example 13:
Pointers and dynamic objects/ Slide 29
Pointer to Pointer
58 58 58
Pointers and dynamic objects/ Slide 30
Example 14:
Pointers and dynamic objects/ Slide 31
Dereferencing Operator *
We can access to the value stored in the variable
pointed to by using the dereferencing operator (*),
… 88 100 … 1024 …
a p
int a = 100;
int *p = &a;
Result is:
cout << a << endl; 100
cout << &a << endl; 1024
cout << p << " " << *p << endl; 1024 100
cout << &p << endl; 1032
Pointers and dynamic objects/ Slide 32
Example 15:
Pointers and dynamic objects/ Slide 33
Example 16:
Pointers and dynamic objects/ Slide 35
Example 17:
Another Pointer Example
Example 18:
Reference Variables
A reference is an additional name to
an existing memory location
Pointer: Reference:
x 9 x
9
ref
ref
int x = 9;
int x=9;
int &ref = x;
int *ref;
ref = &x;
Pointers and dynamic objects/ Slide 38
Example 19:
Reference Variables
A reference variable serves as an alternative name for
an object
Pointers and dynamic objects/ Slide 39
Reference Variables
A reference variable always refers to the
same object. Assigning a reference variable
with a new value actually changes the value
of the referred object.
Reference variables are commonly used for
parameter passing to a function
Pointers and dynamic objects/ Slide 40
1000
1004
1008
1012
1016
Pointers and dynamic objects/ Slide 42
Example 20:
Array Name is a pointer constant
Pointers and dynamic objects/ Slide 43
Example 21:
Dereferencing An Array Name
This element is
called a[0] or
*a
#include <iostream>
a[0] 2 using namespace std;
a void main(){
a[1] 4
int a[5] = {2,4,6,8,22};
a[2] 6 cout << *a << " "
<< a[0];
a[3] 8
} //main
a[4] 22
a
Pointers and dynamic objects/ Slide 44
Example 22:
Array Names as Pointers
To access an array, any pointer to the first element
can be used instead of the name of the array.
We could replace *p by *a
#include <iostream>
a p using namespace std;
void main(){
a[0] 2 22
int a[5] = {2,4,6,8,22};
a[1] 4 int *p = a;
a[2] 6 cout << a[0] << " "
a[3] 8 << *p;
a[4] 22 }
a
Pointers and dynamic objects/ Slide 45
Example 23:
Multiple Array Pointers
Both a and p are pointers to the same array.
a[0]
a[0] 22
2
44
a[1] 4 p
a[2] 6
a[3] 8 p[0]
a[4] 22
Pointers and dynamic objects/ Slide 46
Pointer Arithmetic
Given a pointer p, p+n refers to the element that
is offset from p by n positions.
a 2 p - 1
a + 1 4 p
a + 2 6 p + 1
a + 3 8 p + 2
a + 4 22 p + 3
Pointers and dynamic objects/ Slide 47
a[0] or *(a + 0) 2 a
a[1] or *(a + 1) 4 a + 1
a[2] or *(a + 2) 6 a + 2
a[3] or *(a + 3) 8 a + 3
a[4] or *(a + 4) 22 a + 4
Example 24:
Array of Pointers & Pointers to Array
a
p
b
c
Example 25:
NULL pointer
NULL is a special value that indicates an empty pointer
If you try to access a NULL pointer, you will get an error
int *p;
p = 0;
cout << p << endl; //prints 0
cout << &p << endl;//prints address of
p
cout << *p << endl;//Error!
Pointers and dynamic objects/ Slide 50
Example 26:
Storing 2D Array in 1D Array
int oned[12];
for(int i=0; i<3; i++){
for(int j=0; j<4 ; j++)
oned[i*4+j] = twod[i][j];
}
Example 27:
Pointers and dynamic objects/ Slide 51
table[ 2] or *( table + 2 )
int table[3][4] = {{1,2,3,4}, *(table[i]+j)
What is = table[i][j]
{5,6,7,8},{9,10,11,12}};
**table
? for(int i=0; i<3; i++){
for(int j=0; j<4; j++)
cout << *(*(table+i)+j);
cout << endl;
}
Pointers and dynamic objects/ Slide 52
THANK YOU
Dynamic
Objects
Pointers and dynamic objects/ Slide 54
Memory Management
Static Memory Allocation
Memory is allocated at compilation time
Dynamic Memory
Memory is allocated at running time
Pointers and dynamic objects/ Slide 55
new
delete
{ int* ptr;
int a[200]; ptr = new int[200];
… …
} delete [] ptr;
Pointers and dynamic objects/ Slide 57
Example
int* p = new int;
p
Object (variable) destruction:
Pointers and dynamic objects/ Slide 58
Delete
Syntax
delete p;
storage pointed to by p is returned to free store and p is now
undefined
Example
int* p = new int;
*p = 10;
delete p;
p 10
Pointers and dynamic objects/ Slide 59
Array of New:
dynamic arrays
Syntax
P = new SomeType[Expression];
Where
P is a pointer of type SomeType
Expression is the number of objects to be constructed
-- we are making an array
Example
Dynamic Memory Allocation
Request for “unnamed” memory from the Operating System
new
p = new int[n]; p
Pointers and dynamic objects/ Slide 61
Initialize
}
Pointers and dynamic objects/ Slide 65
print()
void print(int list[], int size) {
cout << "[ ";
for(int i=0; i<size; i++)
cout << list[i] << " ";
cout << "]" << endl;
}
A Dynamic 2D Array
A dynamic array is table
an array of pointers 32 18 12 24
to save space when table[0]
not all rows of the table[1] 13 11 16 12 42 19 14
array are full. table[2]
22
table[3]
int **table; table[4] 13 13 14
table[5]
11 18
table = new int*[6];
…
table[0] = new int[4];
table[1] = new int[7];
table[2] = new int[1];
table[3] = new int[3];
table[4] = new int[2];
table[5] = NULL;
Pointers and dynamic objects/ Slide 67
Memory Allocation
int **table;
Memory Deallocation
Memory leak is a serious bug!
Each row must be deleted individually
Be careful to delete each row before deleting
the table pointer.
for(int i=0; i<6; i++)
delete [ ] table[i];
delete [ ] table;
Pointers and dynamic objects/ Slide 69
nt m, n; int m, n;
cin >> m >> n >> endl;
in >> m >> n >> endl;
int** mat;
mat = imatrix(m,n);
nt** mat; …