Functions
Pointer Parameters
A pointer parameter lets a function update a variable owned by its caller.
address
`&value` passes the address of the caller's variable.
dereference
`*value` accesses the variable through the pointer.
Pointer Parameters
pointer_parameters.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
void addOne(int *value) {
*value = *value + 1;
}
int main(void) {
int value = 3;
addOne(&value);
printf("value=%d\n", value);
return 0;
}
#include <stdio.h>
void addOne(int *value) {
*value = *value + 1;
}
int main(void) {
int value = 7;
addOne(&value);
printf("value=%d\n", value);
return 0;
}
#include <stdio.h>
void addOne(int *value) {
*value = *value + 1;
}
int main(void) {
int value = 10;
addOne(&value);
printf("value=%d\n", value);
return 0;
}
value ← 3
7int main(void) {8 int value→ 3 = 3; //@value=7, 10910 addOne(&value3);11 printf("value=%d\n", value);void addOne(int *value)
3void addOne(int *value⟨addr A⟩) {4 *value⟨addr A⟩ = *value + 1;5}value ← 4
10 addOne(&value→ 4);11 printf("value=%d\n", value4);12 return 0;13}outputvalue=4
value ← 7
7int main(void) {8 int value→ 7 = 7;910 addOne(&value7);11 printf("value=%d\n", value);void addOne(int *value)
3void addOne(int *value⟨addr A⟩) {4 *value⟨addr A⟩ = *value + 1;5}value ← 8
10 addOne(&value→ 8);11 printf("value=%d\n", value8);12 return 0;13}outputvalue=8
value ← 10
7int main(void) {8 int value→ 10 = 10;910 addOne(&value10);11 printf("value=%d\n", value);void addOne(int *value)
3void addOne(int *value⟨addr A⟩) {4 *value⟨addr A⟩ = *value + 1;5}value ← 11
10 addOne(&value→ 11);11 printf("value=%d\n", value11);12 return 0;13}outputvalue=11
Follow the Address
valuestarts as3.&valuepasses the caller variable's address.- The pointer parameter points back to that same
value. *value = *value + 1changes the caller's variable to4.- The program prints
value=4. | step | value seen | | --- | --- | | before call | 3 | | through*value| 3 | | after*value + 1| 4 | | printed | value=4 |
Exercise: pointer_parameters.c
Reproduce value=4, then use the pinned value variants 7 and 10 to predict value=8 and value=11.