Lifetime and scope comparison - Time & Space Complexity
When we look at lifetime and scope in C, we want to understand how long variables exist and where they can be used.
We ask: How does the program's work change as we use variables with different lifetimes and scopes?
Analyze the time complexity of the following code snippet.
#include <stdio.h>
void func() {
int x = 0; // local variable
for (int i = 0; i < 1000; i++) {
x += i;
}
printf("%d\n", x);
}
int main() {
static int y = 0; // static variable
y++;
func();
return 0;
}
This code shows a local variable inside a function and a static variable in main, then runs a loop inside func.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop inside func that runs 1000 times.
- How many times: Exactly 1000 times each time func is called.
Here, the loop runs a fixed 1000 times, so the work does not grow with input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1000 |
| 100 | 1000 |
| 1000 | 1000 |
Pattern observation: The number of operations stays the same no matter the input size.
Time Complexity: O(1)
This means the program does a fixed amount of work regardless of input size.
[X] Wrong: "Because there is a loop, the time complexity must grow with input size."
[OK] Correct: The loop runs a fixed number of times (1000), so it does not depend on input size and stays constant.
Understanding how variable lifetime and scope affect program behavior helps you explain code clearly and reason about performance in real projects.
"What if the loop count in func was based on a function parameter n? How would the time complexity change?"
Practice
scope of a variable in C?Solution
Step 1: Understand the meaning of scope
Scope means where in the code a variable can be used or accessed.Step 2: Differentiate scope from lifetime
Lifetime is about how long the variable exists in memory, not where it can be used.Final Answer:
The part of the program where the variable can be accessed -> Option CQuick Check:
Scope = where variable is accessible [OK]
- Confusing scope with lifetime
- Thinking scope is about memory size
- Mixing scope with data type
Solution
Step 1: Recall correct syntax for static local variable
The keywordstaticcomes before the type:static int count = 0;.Step 2: Identify invalid syntax options
int static count = 0;has incorrect order.auto static int count = 0;andregister static int count = 0;use invalid combinations of storage class specifiers.Final Answer:
static int count = 0; -> Option AQuick Check:
Static local variable syntax = static before type [OK]
- Placing 'static' after type
- Combining 'auto' and 'static' incorrectly
- Using 'register' with 'static'
void func() {
static int x = 0;
x++;
printf("%d ", x);
}
int main() {
for(int i = 0; i < 3; i++) {
func();
}
return 0;
}Solution
Step 1: Understand static variable behavior inside function
Static variablexkeeps its value between function calls and starts at 0.Step 2: Trace the loop and function calls
Each call incrementsxby 1 and prints it: first 1, then 2, then 3.Final Answer:
1 2 3 -> Option AQuick Check:
Static variable increments across calls = 1 2 3 [OK]
- Assuming static resets each call
- Confusing initial value of static variable
- Ignoring the loop effect
int main() {
if (1) {
int a = 5;
}
printf("%d", a);
return 0;
}Solution
Step 1: Check where 'a' is declared and used
'a' is declared inside the if-block and cannot be accessed outside it.Step 2: Understand scope rules
Variables declared inside braces have local scope limited to those braces, so 'a' is out of scope in printf.Final Answer:
Variable 'a' is used outside its scope -> Option DQuick Check:
Using variable outside its block scope causes error [OK]
- Trying to use variable outside its block
- Thinking static fixes scope errors
- Ignoring variable lifetime vs scope
void counter() {
static int count = 0;
int temp = 0;
count++;
temp++;
printf("%d %d\n", count, temp);
}
int main() {
for (int i = 0; i < 3; i++) {
counter();
}
return 0;
}
What will be the output and why?Solution
Step 1: Analyze 'count' variable behavior
'count' is static, so it keeps incrementing across calls: 1, 2, 3.Step 2: Analyze 'temp' variable behavior
'temp' is local and reinitialized to 0 each call, so it increments to 1 every time.Step 3: Understand output pattern
Output lines are: "1 1", "2 1", "3 1" matching the behavior above.Final Answer:
1 1 2 1 3 1 Because 'count' is static and 'temp' is local each call -> Option BQuick Check:
Static keeps value; local resets each call [OK]
- Assuming local variable keeps value between calls
- Confusing initialization of static vs local
- Ignoring that temp resets every call
Ready to prove it?
Pass the test and this pattern moves unknown
