Address and dereference operators in C++ - Time & Space Complexity
Let's see how using address and dereference operators affects how long a program takes to run.
We want to know how the number of steps changes when we use these operators in code.
Analyze the time complexity of the following code snippet.
int sumArray(int* arr, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += *(arr + i); // dereference operator
}
return sum;
}
This code adds up all numbers in an array using pointers and the dereference operator.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the array and dereferencing each element.
- How many times: Exactly once for each element in the array (size times).
Each element requires one dereference and addition, so the total steps grow as the array gets bigger.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 dereferences and additions |
| 100 | About 100 dereferences and additions |
| 1000 | About 1000 dereferences and additions |
Pattern observation: The work grows directly with the number of elements.
Time Complexity: O(n)
This means the time to finish grows in a straight line as the array gets bigger.
[X] Wrong: "Using pointers and dereference operators makes the code run faster or slower in a way that changes the overall time complexity."
[OK] Correct: The operators just access data; the number of times you do this depends on the array size, so the time complexity stays the same.
Understanding how pointer operations scale helps you explain your code clearly and shows you know what affects performance.
"What if we used a nested loop to sum elements in a 2D array using pointers? How would the time complexity change?"
Practice
& operator do in C++?Solution
Step 1: Understand the
The&operator&operator is used to get the address of a variable in memory.Step 2: Differentiate from other operators
It does not multiply, declare pointers, or dereference pointers; those are different operations.Final Answer:
It gives the memory address of a variable. -> Option DQuick Check:
&operator = address retrieval [OK]
- Confusing & with multiplication operator
- Thinking & declares a pointer
- Mixing & with dereference * operator
Solution
Step 1: Recall pointer declaration syntax
In C++, a pointer to an int is declared asint *ptr;where*indicates pointer type.Step 2: Check other options for syntax errors
int &ptr;declares a reference, not a pointer.int ptr*;and*int ptr;are invalid syntax.Final Answer:
int *ptr; -> Option AQuick Check:
Pointer declaration =int *ptr;[OK]
- Using & instead of * for pointers
- Placing * after variable name incorrectly
- Confusing pointers with references
int x = 10; int *p = &x; *p = 20; std::cout << x << std::endl;
Solution
Step 1: Understand pointer assignment
Pointerpstores the address ofx. Using*p = 20;changes the value at that address.Step 2: Check the effect on
Sincex*ppoints tox, changing*pto 20 updatesxto 20.Final Answer:
20 -> Option CQuick Check:
Dereferencing pointer changes original variable [OK]
- Thinking *p is the address, not the value
- Expecting output to be original x (10)
- Confusing pointer variable with pointed value
int x = 5; int *p; *p = x; std::cout << *p << std::endl;
Solution
Step 1: Check pointer initialization
Pointerpis declared but not assigned an address before*p = x;.Step 2: Understand dereferencing uninitialized pointer
Dereferencingpwithout initialization causes undefined behavior or crash.Final Answer:
Pointer p is not initialized before dereferencing. -> Option BQuick Check:
Always initialize pointers before dereferencing [OK]
- Dereferencing pointer without assigning address
- Assuming pointer auto-points to variable
- Confusing pointer declaration with initialization
int a = 3, b = 4; int *p = &a; int *q = &b; int *temp = p; p = q; q = temp; std::cout << *p << " " << *q << std::endl;
Solution
Step 1: Understand pointer swapping
Initially,ppoints toa(3),qpoints tob(4). The code swaps the pointers usingtemp.Step 2: Check final pointer values
After swapping,ppoints tob(4), andqpoints toa(3).Final Answer:
4 3 -> Option AQuick Check:
Pointer swap changes what they point to [OK]
- Confusing swapping pointers with swapping values
- Expecting original order after swap
- Mixing pointer values and pointed values
Ready to prove it?
Pass the test and this pattern moves unknown
