Pointer declaration - Time & Space Complexity
When we declare pointers in C, it's important to understand how this affects the program's steps.
We want to see how the program's work changes as we use pointers.
Analyze the time complexity of the following code snippet.
int main() {
int x = 10;
int *p = &x;
*p = 20;
return 0;
}
This code declares a pointer to an integer, assigns it the address of a variable, and changes the variable's value through the pointer.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Simple variable assignment and pointer usage.
- How many times: Each operation runs only once, no loops or repeated steps.
Since there are no loops or repeated steps, the work stays the same no matter the input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 4 |
| 100 | 4 |
| 1000 | 4 |
Pattern observation: The number of steps does not increase as input size grows.
Time Complexity: O(1)
This means the program does a fixed amount of work regardless of input size.
[X] Wrong: "Using pointers makes the program slower because it adds extra steps."
[OK] Correct: Declaring and using a pointer is just like using a variable; it does not add repeated work or loops.
Understanding how pointers work and their time cost helps you write clear and efficient code, a skill valued in many programming tasks.
"What if we added a loop that uses the pointer to change multiple values? How would the time complexity change?"
Practice
int *ptr;Solution
Step 1: Understand the * symbol in declaration
The * before ptr means ptr is a pointer variable, not a normal integer.Step 2: Check the type before *
The type before * is int, so ptr points to an integer variable.Final Answer:
ptr is a pointer to an integer variable -> Option BQuick Check:
int *ptr means pointer to int [OK]
- Thinking * means multiplication here
- Confusing pointer with normal variable
- Ignoring the type before *
Solution
Step 1: Recall pointer declaration syntax
Pointer declaration syntax is: type *name; so the * goes between type and variable name.Step 2: Check each option
float *ptr; matches correct syntax: float *ptr; others have wrong order or missing parts.Final Answer:
float *ptr; -> Option DQuick Check:
Pointer syntax = type *name; [OK]
- Placing * after variable name
- Putting * before type
- Missing * entirely
int x = 10;
int *p = &x;
printf("%d", *p);Solution
Step 1: Understand pointer initialization
p is assigned the address of x using &x, so p points to x.Step 2: Dereference pointer to get value
*p means value at address p, which is x's value 10.Final Answer:
10 -> Option AQuick Check:
*p gives value at pointer address [OK]
- Printing pointer p instead of *p
- Confusing address and value
- Forgetting & to get address
int *p; p = 5;
Solution
Step 1: Check pointer assignment rules
A pointer must hold a memory address, not a direct integer value.Step 2: Analyze given assignment
Assigning 5 directly to pointer p is invalid; it should be an address like &variable.Final Answer:
Error: assigning integer directly to pointer -> Option AQuick Check:
Pointer = address, not direct value [OK]
- Assigning integer instead of address
- Forgetting & operator for address
- Confusing pointer and normal variable
num through the pointer?int num = 20; // Which declaration is correct?
Solution
Step 1: Understand pointer declaration for modifying variable
To modify num via pointer, pointer must hold address of num, declared as int *ptr.Step 2: Check each option
int *ptr = # correctly declares pointer to int and assigns address of num. Others are invalid syntax or wrong types.Final Answer:
int *ptr = # -> Option CQuick Check:
Pointer to int = &variable for modification [OK]
- Assigning value instead of address
- Using wrong type for pointer
- Confusing references with pointers
Ready to prove it?
Pass the test and this pattern moves unknown
