References let a function work with the caller's original variable.

reference parameter A reference parameter, written with `&`, can change the variable passed by the caller.

References

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

void addBonus(int& score, int bonus) {
    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) {
    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) {
    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) {
    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) {
    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

    7int main() {8    int score→ 40 = 40; //@score=25, 609    int bonus→ 5 = 5; //@bonus=10, 151011    addBonus(score40, bonus5);
  2. score ← 45

    3void addBonus(int& score40, int bonus5) {4    score→ 45 += bonus5;5}
  3. score ← 45

    11    addBonus(score→ 45, bonus5);1213    std::cout << "bonus=" << bonus5 << std::endl;14    std::cout << "score=" << score45 << std::endl;15    return 0;16}
    outputbonus=5
    score=45
  1. score ← 25, bonus ← 5

    7int main() {8    int score→ 25 = 25;9    int bonus→ 5 = 5;1011    addBonus(score25, bonus5);
  2. score ← 30

    3void addBonus(int& score25, int bonus5) {4    score→ 30 += bonus5;5}
  3. score ← 30

    11    addBonus(score→ 30, bonus5);1213    std::cout << "bonus=" << bonus5 << std::endl;14    std::cout << "score=" << score30 << std::endl;15    return 0;16}
    outputbonus=5
    score=30
  1. score ← 60, bonus ← 5

    7int main() {8    int score→ 60 = 60;9    int bonus→ 5 = 5;1011    addBonus(score60, bonus5);
  2. score ← 65

    3void addBonus(int& score60, int bonus5) {4    score→ 65 += bonus5;5}
  3. score ← 65

    11    addBonus(score→ 65, bonus5);1213    std::cout << "bonus=" << bonus5 << std::endl;14    std::cout << "score=" << score65 << std::endl;15    return 0;16}
    outputbonus=5
    score=65
  1. score ← 40, bonus ← 10

    7int main() {8    int score→ 40 = 40;9    int bonus→ 10 = 10;1011    addBonus(score40, bonus10);
  2. score ← 50

    3void addBonus(int& score40, int bonus10) {4    score→ 50 += bonus10;5}
  3. score ← 50

    11    addBonus(score→ 50, bonus10);1213    std::cout << "bonus=" << bonus10 << std::endl;14    std::cout << "score=" << score50 << std::endl;15    return 0;16}
    outputbonus=10
    score=50
  1. score ← 40, bonus ← 15

    7int main() {8    int score→ 40 = 40;9    int bonus→ 15 = 15;1011    addBonus(score40, bonus15);
  2. score ← 55

    3void addBonus(int& score40, int bonus15) {4    score→ 55 += bonus15;5}
  3. score ← 55

    11    addBonus(score→ 55, bonus15);1213    std::cout << "bonus=" << bonus15 << std::endl;14    std::cout << "score=" << score55 << std::endl;15    return 0;16}
    outputbonus=15
    score=55

Follow the Reference

  1. score starts as 40.
  2. bonus starts as 5.
  3. addBonus(score, bonus) receives score by reference.
  4. The function adds 5 to the caller's original score.
  5. The program prints bonus=5 and score=45. | starting score | bonus | printed score | | --- | --- | --- | | 40 | 5 | 45 | | 25 | 5 | 30 | | 40 | 10 | 50 |

Exercise: references.cpp

Reproduce bonus=5 and score=45, then change only score to 25 to predict score=30, and change only bonus to 10 to predict score=50.