Passing a pointer lets a function update the caller's object.

pointer parameter A pointer parameter can be checked for `nullptr` and then dereferenced to update the target object.

Pointer Parameters

example
pointer_parameters.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

void addBonus(int* score, int bonus) {
    if (score != nullptr) {
        *score += bonus;
    }
}

int main() {
    int score = 40;
    int bonus = 5;

    addBonus(&score, bonus);

    std::cout << "bonus=" << bonus << std::endl;
    std::cout << "score=" << score << std::endl;
    return 0;
}
#include <iostream>

void addBonus(int* score, int bonus) {
    if (score != nullptr) {
        *score += bonus;
    }
}

int main() {
    int score = 25;
    int bonus = 5;

    addBonus(&score, bonus);

    std::cout << "bonus=" << bonus << std::endl;
    std::cout << "score=" << score << std::endl;
    return 0;
}
#include <iostream>

void addBonus(int* score, int bonus) {
    if (score != nullptr) {
        *score += bonus;
    }
}

int main() {
    int score = 60;
    int bonus = 5;

    addBonus(&score, bonus);

    std::cout << "bonus=" << bonus << std::endl;
    std::cout << "score=" << score << std::endl;
    return 0;
}
#include <iostream>

void addBonus(int* score, int bonus) {
    if (score != nullptr) {
        *score += bonus;
    }
}

int main() {
    int score = 40;
    int bonus = 10;

    addBonus(&score, bonus);

    std::cout << "bonus=" << bonus << std::endl;
    std::cout << "score=" << score << std::endl;
    return 0;
}
#include <iostream>

void addBonus(int* score, int bonus) {
    if (score != nullptr) {
        *score += bonus;
    }
}

int main() {
    int score = 40;
    int bonus = 15;

    addBonus(&score, bonus);

    std::cout << "bonus=" << bonus << std::endl;
    std::cout << "score=" << score << std::endl;
    return 0;
}
  1. score ← 40, bonus ← 5

    9int main() {10    int score→ 40 = 40; //@score=25, 6011    int bonus→ 5 = 5; //@bonus=10, 151213    addBonus(&score40, bonus5);
  2. void addBonus(int* score, int bonus)

    3void addBonus(int* score⟨addr A⟩, int bonus5) {4    if (score != nullptr) {
  3. if (score != nullptr)

    3void addBonus(int* score, int bonus) {4    if (score⟨addr A⟩ != nullptr) {5        *score⟨addr A⟩ += bonus5;6    }
  4. score ← 45

    13    addBonus(&score→ 45, bonus5);1415    std::cout << "bonus=" << bonus5 << std::endl;16    std::cout << "score=" << score45 << std::endl;17    return 0;18}
    outputbonus=5
    score=45
  1. score ← 25, bonus ← 5

    9int main() {10    int score→ 25 = 25;11    int bonus→ 5 = 5;1213    addBonus(&score25, bonus5);
  2. void addBonus(int* score, int bonus)

    3void addBonus(int* score⟨addr A⟩, int bonus5) {4    if (score != nullptr) {
  3. if (score != nullptr)

    3void addBonus(int* score, int bonus) {4    if (score⟨addr A⟩ != nullptr) {5        *score⟨addr A⟩ += bonus5;6    }
  4. score ← 30

    13    addBonus(&score→ 30, bonus5);1415    std::cout << "bonus=" << bonus5 << std::endl;16    std::cout << "score=" << score30 << std::endl;17    return 0;18}
    outputbonus=5
    score=30
  1. score ← 60, bonus ← 5

    9int main() {10    int score→ 60 = 60;11    int bonus→ 5 = 5;1213    addBonus(&score60, bonus5);
  2. void addBonus(int* score, int bonus)

    3void addBonus(int* score⟨addr A⟩, int bonus5) {4    if (score != nullptr) {
  3. if (score != nullptr)

    3void addBonus(int* score, int bonus) {4    if (score⟨addr A⟩ != nullptr) {5        *score⟨addr A⟩ += bonus5;6    }
  4. score ← 65

    13    addBonus(&score→ 65, bonus5);1415    std::cout << "bonus=" << bonus5 << std::endl;16    std::cout << "score=" << score65 << std::endl;17    return 0;18}
    outputbonus=5
    score=65
  1. score ← 40, bonus ← 10

    9int main() {10    int score→ 40 = 40;11    int bonus→ 10 = 10;1213    addBonus(&score40, bonus10);
  2. void addBonus(int* score, int bonus)

    3void addBonus(int* score⟨addr A⟩, int bonus10) {4    if (score != nullptr) {
  3. if (score != nullptr)

    3void addBonus(int* score, int bonus) {4    if (score⟨addr A⟩ != nullptr) {5        *score⟨addr A⟩ += bonus10;6    }
  4. score ← 50

    13    addBonus(&score→ 50, bonus10);1415    std::cout << "bonus=" << bonus10 << std::endl;16    std::cout << "score=" << score50 << std::endl;17    return 0;18}
    outputbonus=10
    score=50
  1. score ← 40, bonus ← 15

    9int main() {10    int score→ 40 = 40;11    int bonus→ 15 = 15;1213    addBonus(&score40, bonus15);
  2. void addBonus(int* score, int bonus)

    3void addBonus(int* score⟨addr A⟩, int bonus15) {4    if (score != nullptr) {
  3. if (score != nullptr)

    3void addBonus(int* score, int bonus) {4    if (score⟨addr A⟩ != nullptr) {5        *score⟨addr A⟩ += bonus15;6    }
  4. score ← 55

    13    addBonus(&score→ 55, bonus15);1415    std::cout << "bonus=" << bonus15 << std::endl;16    std::cout << "score=" << score55 << std::endl;17    return 0;18}
    outputbonus=15
    score=55