Refer to an Existing Value
Refer to an Existing Value
A reference is another name for an existing object.
A mark-correction function taking int& can deliberately modify the caller’s mark rather than a private copy.
Before this lesson, review Pass Inputs and Return Results when needed.
What you’ll learn
- Use references to refer to an Existing Value.
- Explain how the complete example produces 72.
- Make the practice change and explain why the result changes or stays the same.
Follow a complete C++ example
A mark-correction function taking int& can deliberately modify the caller’s mark rather than a private copy.
Read the declarations above main before tracing its statements. Each declared name supplies the value, type or operation used later. The std:: prefix selects a name from the standard library, and cout << sends a value to the output stream.
C++17 · main.cpp · complete program
#include <iostream>
void correct(int& marks) {
marks += 2;
}
int main() {
int marks = 70;
correct(marks);
std::cout << marks << '\n';
return 0;
}
Expected output
72Run in C++ compiler →Connect the code to its result
C++17 · source used in this explanation
#include <iostream>
void correct(int& marks) {
marks += 2;
}
int main() {
int marks = 70;
correct(marks);
std::cout << marks << '\n';
return 0;
}
Expected output
72A reference is another name for an existing object. A mark-correction function taking int& can deliberately modify the caller’s mark rather than a private copy.
Trace the result: Read the complete program below from its starting values to the output operations. Each std::cout statement displays the value supplied at that point; \n begins the next line. The resulting lines, in order, are 72. In this example, distinguish what the program calculates or changes from what it actually displays.
Refer to an Existing Value: cause and effect
Operation
A reference is another name for an existing object.
Effect on school data
A mark-correction function taking int& can deliberately modify the caller’s mark rather than a private copy.
Observed result
The program displays these lines after the shown operations.
72
Important mistakes and boundaries
A reference must bind to a suitable object and cannot later be reseated. Passing by reference exposes mutation, so use it deliberately.
Change the school example
C++17 · edit this complete example
#include <iostream>
void correct(int& marks) {
marks += 2;
}
int main() {
int marks = 70;
correct(marks);
std::cout << marks << '\n';
return 0;
}
Your task: Start marks at 60. Before running your edited program, predict the new output and explain which stored value, condition or object changes. Keep the rest of the example intact.
Use the complete source repeated here; this task does not depend on remembering code from another section.
Worked answer and reasoning
Worked variation: Start marks at 60. The caller’s mark becomes 62.
A reference is another name for an existing object. A mark-correction function taking int& can deliberately modify the caller’s mark rather than a private copy.
A reference must bind to a suitable object and cannot later be reseated. Passing by reference exposes mutation, so use it deliberately.
For a baseline run, save this source as main.cpp and use clang++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o school, or equivalent g++ flags. Recompile after editing so that you run the updated executable.
The source and output below belong to the edited program. Compare them with the original example to see the consequence of this single change.
C++17 · worked variation · complete program
#include <iostream>
void correct(int& marks) {
marks += 2;
}
int main() {
int marks = 60;
correct(marks);
std::cout << marks << '\n';
return 0;
}
Expected output
62Run in C++ compiler →Check your understanding
C++17 · original program for this question
#include <iostream>
void correct(int& marks) {
marks += 2;
}
int main() {
int marks = 70;
correct(marks);
std::cout << marks << '\n';
return 0;
}
Check a common mistake
What to remember
A reference is another name for an existing object. A reference must bind to a suitable object and cannot later be reseated. Passing by reference exposes mutation, so use it deliberately.
Useful connections: Pass Inputs and Return Results, Give a Task a Name.
Language and design guidance: C++ Core Guidelines and C++ working draft. The draft describes an evolving language; these examples deliberately target C++17.
Reaching the recap and completing the quizzes are separate milestones.