References in C++
A reference is an alias (alternate name) for an existing variable. Once a reference is created, it refers to the same memory location as the original variable. Any change made through the reference directly affects the original. References are simpler and safer than pointers for many use cases.
Declaring a Reference
data_type &reference_name = existing_variable;
#include <iostream>
using namespace std;
int main() {
int x = 10;
int &ref = x; // ref is an alias for x
cout << "x = " << x << endl;
cout << "ref = " << ref << endl;
ref = 50; // changes x through ref
cout << "After ref = 50, x = " << x << endl;
return 0;
}
Output:
x = 10
ref = 10
After ref = 50, x = 50Reference vs Pointer
| Feature | Reference | Pointer |
|---|---|---|
| Syntax | int &r = x; | int *p = &x; |
| Can be null | No | Yes |
| Can be reassigned | No (always refers to same variable) | Yes |
| Requires dereferencing | No | Yes (*p) |
| Must be initialized at declaration | Yes | No |
References as Function Parameters
Passing a reference to a function allows the function to modify the original variable:
void increment(int &n) {
n++;
}
int main() {
int value = 5;
increment(value);
cout << value << endl; // 6 — original modified
return 0;
}
Swapping Two Numbers Using References:
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y);
cout << "x = " << x << ", y = " << y << endl;
return 0;
}
Output:
x = 20, y = 10Returning a Reference from a Function
A function can return a reference to allow the caller to directly modify a variable:
int & getRef(int &x) {
return x;
}
int main() {
int a = 5;
getRef(a) = 99; // directly assigns to a
cout << a << endl; // 99
return 0;
}
Const References
A const reference allows reading a variable without allowing modification. This is especially useful in function parameters to avoid unnecessary copying of large objects:
void display(const string &name) {
cout << "Hello, " << name << endl;
// name = "Bob"; // error — cannot modify a const reference
}
int main() {
string myName = "Alice";
display(myName);
return 0;
}
Output:
Hello, AliceReferences to Arrays
int arr[] = {1, 2, 3, 4, 5};
int (&ref)[5] = arr; // reference to the entire array
for (int x : ref) {
cout << x << " ";
}
Output:
1 2 3 4 5When to Use References
- When a function needs to modify the caller's variable — use reference parameter.
- When passing large objects to functions — use
constreference to avoid copying. - When creating an alias for clarity — use references to rename complex expressions.
- When pointer syntax is unnecessarily complex — references are cleaner.
Key Takeaways
- A reference is an alternate name for an existing variable — they share the same memory.
- Changes through a reference directly affect the original variable.
- References must be initialized when declared and cannot be reassigned.
- Use
constreferences for read-only access without copying. - References make function parameter passing clean and efficient.
