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

value
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;
}
  1. value ← 3

    7int main(void) {8    int value→ 3 = 3; //@value=7, 10910    addOne(&value3);11    printf("value=%d\n", value);
  2. void addOne(int *value)

    3void addOne(int *value⟨addr A⟩) {4    *value⟨addr A⟩ = *value + 1;5}
  3. value ← 4

    10    addOne(&value→ 4);11    printf("value=%d\n", value4);12    return 0;13}
    outputvalue=4
  1. value ← 7

    7int main(void) {8    int value→ 7 = 7;910    addOne(&value7);11    printf("value=%d\n", value);
  2. void addOne(int *value)

    3void addOne(int *value⟨addr A⟩) {4    *value⟨addr A⟩ = *value + 1;5}
  3. value ← 8

    10    addOne(&value→ 8);11    printf("value=%d\n", value8);12    return 0;13}
    outputvalue=8
  1. value ← 10

    7int main(void) {8    int value→ 10 = 10;910    addOne(&value10);11    printf("value=%d\n", value);
  2. void addOne(int *value)

    3void addOne(int *value⟨addr A⟩) {4    *value⟨addr A⟩ = *value + 1;5}
  3. value ← 11

    10    addOne(&value→ 11);11    printf("value=%d\n", value11);12    return 0;13}
    outputvalue=11

Follow the Address

  1. value starts as 3.
  2. &value passes the caller variable's address.
  3. The pointer parameter points back to that same value.
  4. *value = *value + 1 changes the caller's variable to 4.
  5. 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.