Fundamentals of Programming
session 23
Introduction to Pointers
What is a Pointer?
What is a Pointer?
What is a Pointer?
What is a Pointer?
-101 1204
2100 2096 2092 2088
Memory
int i = 1204;
int j = -101; j
i
What is a Pointer?
-101 1204
2100 2096 2092 2088
Memory
int i = 1204;
int j = -101;
printf("%u\n", &i);
j i
i j &i &j 1204 -101 2088 2092
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101; j
i
2108
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101; j
i
2108
What is a Pointer?
-101 1204 Memory
int i = 1204;
int j = -101; j
i
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
? ? ? ?
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
1204 ? ? ?
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
1204 2088 ? ?
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
1204 2088 2088 ?
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
1204 2088 2088 2108
What is a Pointer?
-101 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j i
2108 p i p &i &p
1204 2088 2088 2108
What is a Pointer?
1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j = *p;
j i
2108 p
i p &i &p *p
1204 2088 2088 2108 ?
What is a Pointer?
1204 1204
2100 2096 2092 2088
2088 Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j = *p;
j i
2108 p
i p &i &p *p
1204 2088 2088 2108 1204
What is a Pointer?
1204
?
2100 2096 2092 2088
? Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j = *p;
*p = -22;
j i
2108 p
i p &i &p *p
? ? ? ? ?
What is a Pointer?
1204 -22
2100 2096 2092 2088
2088
Memory
int i = 1204;
int j = -101;
int *p;
p = &i;
j = *p;
*p = -22;
j i
2108 p
i p &i &p *p
-22 2088 2088 2108 -22
Simulating by-reference argument passing
Simulating by-reference argument passing
Simulating by-reference arguments
x
p
Memory
multiple outputs
main:r main:q main:b main:a
divide:qp divide:b divide:a
Memory
divide:rp
Arguments are still by-value
main:r main:q main:b
divide:qp divide:b divide:a
Memory
divide:rp main:a
divide:rp
divide:qp divide:b divide:a
divide:rp divide:rp
Arguments are still by-value
main:r main:q main:b
divide:qp divide:b divide:a
Memory
divide:rp main:a
divide:rp
divide:qp divide:b divide:a
divide:rp divide:rp
Arguments are still by-value
main:r main:q main:b
divide:qp divide:b divide:a
Memory
divide:rp main:a
divide:rp
divide:qp divide:b divide:a
divide:rp divide:rp
use %p to print addresses
main:r main:q main:b
divide:qp divide:b divide:a
Memory
divide:rp main:a
divide:rp
divide:qp divide:b divide:a
divide:rp divide:rp
Example: Swapping
pointerfunc5_swap.c
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
constant pointers
same thing