Reference vs pointer in C++ - Performance Comparison
We want to see how using references or pointers affects the speed of a program.
How does the program's work change when we use one or the other?
Analyze the time complexity of the following code snippet.
void incrementByPointer(int* ptr) {
(*ptr)++;
}
void incrementByReference(int& ref) {
ref++;
}
int main() {
int a = 0;
incrementByPointer(&a);
incrementByReference(a);
return 0;
}
This code shows two ways to increase a number: one uses a pointer, the other a reference.
Look for repeated actions that take time.
- Primary operation: Incrementing the integer value.
- How many times: Each function does this once per call.
Since each function just changes one number once, the work stays the same no matter the input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 increments if called 10 times |
| 100 | 100 increments if called 100 times |
| 1000 | 1000 increments if called 1000 times |
Pattern observation: The work grows directly with how many times you call the function.
Time Complexity: O(n)
This means the time grows in a straight line with the number of times you run the increment.
[X] Wrong: "Using pointers is always slower than references because of extra steps."
[OK] Correct: Both pointers and references usually compile to similar machine instructions, so their speed is nearly the same for simple operations.
Understanding how references and pointers work helps you write clear and efficient code, a skill valued in many programming tasks.
"What if we passed the integer by value instead of by pointer or reference? How would the time complexity change?"
Practice
Solution
Step 1: Understand what a reference is
A reference acts as another name for an existing variable and must be initialized when declared.Step 2: Compare with pointers
Unlike pointers, references cannot be changed to refer to another variable or be null.Final Answer:
A reference is an alias for another variable and cannot be changed to refer to another variable. -> Option AQuick Check:
Reference = alias, fixed binding [OK]
- Thinking references can be null
- Confusing references with pointers
- Assuming references can be reassigned
Solution
Step 1: Recall pointer declaration syntax
In C++, a pointer to an int is declared using an asterisk (*) before the variable name.Step 2: Analyze options
int *ptr; uses "int *ptr;" which correctly declares a pointer to int. int ptr; declares an int variable, B declares a reference, and D is invalid syntax.Final Answer:
int *ptr; -> Option BQuick Check:
Pointer syntax = int *ptr [OK]
- Omitting the * for pointer declaration
- Using & which declares a reference
- Combining * and & incorrectly
int x = 10; int &ref = x; int *ptr = &x; ref = 20; *ptr = 30; std::cout << x << std::endl;
Solution
Step 1: Trace reference assignment
ref is a reference to x, so ref = 20 sets x to 20.Step 2: Trace pointer assignment
ptr points to x, so *ptr = 30 sets x to 30.Final Answer:
30 -> Option AQuick Check:
Reference and pointer both modify x = 30 [OK]
- Thinking ref and ptr are independent variables
- Confusing pointer dereference syntax
- Assuming ref can be reassigned
int a = 5; int &ref; ref = a; std::cout << ref << std::endl;
Solution
Step 1: Check reference declaration rules
References must be initialized at the time of declaration; they cannot be declared without initialization.Step 2: Analyze the code
int &ref; is invalid because ref is not initialized. Assigning ref = a; later is not initialization but assignment.Final Answer:
Reference must be initialized when declared. -> Option CQuick Check:
Reference declaration requires immediate initialization [OK]
- Thinking references can be declared then assigned
- Confusing assignment with initialization
- Assuming pointers and references behave the same
int x = 5; int y = 10; int *ptr = &x; int &ref = y; ptr = &y; ref = *ptr + 5; std::cout << x << ", " << y << std::endl;
Solution
Step 1: Trace pointer reassignment
ptr initially points to x, then is reassigned to point to y.Step 2: Trace reference and assignment
ref is a reference to y. The statement ref = *ptr + 5 means y = y + 5 (since ptr points to y).Step 3: Final values
x remains 5, y becomes 10 + 5 = 15.Final Answer:
5, 15 -> Option DQuick Check:
Pointer changes target; reference updates y = 15 [OK]
- Assuming reference ref points to x
- Forgetting pointer reassignment
- Confusing reference assignment with pointer assignment
Ready to prove it?
Pass the test and this pattern moves unknown
