Pointers
Pointer Parameters
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
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;
}
score ← 40, bonus ← 5
9int main() {10 int score→ 40 = 40; //@score=25, 6011 int bonus→ 5 = 5; //@bonus=10, 151213 addBonus(&score40, bonus5);void addBonus(int* score, int bonus)
3void addBonus(int* score⟨addr A⟩, int bonus5) {4 if (score != nullptr) {if (score != nullptr)
3void addBonus(int* score, int bonus) {4 if (score⟨addr A⟩ != nullptr) {5 *score⟨addr A⟩ += bonus5;6 }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
score ← 25, bonus ← 5
9int main() {10 int score→ 25 = 25;11 int bonus→ 5 = 5;1213 addBonus(&score25, bonus5);void addBonus(int* score, int bonus)
3void addBonus(int* score⟨addr A⟩, int bonus5) {4 if (score != nullptr) {if (score != nullptr)
3void addBonus(int* score, int bonus) {4 if (score⟨addr A⟩ != nullptr) {5 *score⟨addr A⟩ += bonus5;6 }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
score ← 60, bonus ← 5
9int main() {10 int score→ 60 = 60;11 int bonus→ 5 = 5;1213 addBonus(&score60, bonus5);void addBonus(int* score, int bonus)
3void addBonus(int* score⟨addr A⟩, int bonus5) {4 if (score != nullptr) {if (score != nullptr)
3void addBonus(int* score, int bonus) {4 if (score⟨addr A⟩ != nullptr) {5 *score⟨addr A⟩ += bonus5;6 }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
score ← 40, bonus ← 10
9int main() {10 int score→ 40 = 40;11 int bonus→ 10 = 10;1213 addBonus(&score40, bonus10);void addBonus(int* score, int bonus)
3void addBonus(int* score⟨addr A⟩, int bonus10) {4 if (score != nullptr) {if (score != nullptr)
3void addBonus(int* score, int bonus) {4 if (score⟨addr A⟩ != nullptr) {5 *score⟨addr A⟩ += bonus10;6 }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
score ← 40, bonus ← 15
9int main() {10 int score→ 40 = 40;11 int bonus→ 15 = 15;1213 addBonus(&score40, bonus15);void addBonus(int* score, int bonus)
3void addBonus(int* score⟨addr A⟩, int bonus15) {4 if (score != nullptr) {if (score != nullptr)
3void addBonus(int* score, int bonus) {4 if (score⟨addr A⟩ != nullptr) {5 *score⟨addr A⟩ += bonus15;6 }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