Union basics - Time & Space Complexity
When working with unions in C, it's helpful to understand how the program's steps grow as data changes.
We want to see how the time to run code with unions changes when the input size changes.
Analyze the time complexity of the following code snippet.
#include <stdio.h>
union Data {
int i;
float f;
char str[20];
};
void printUnion(union Data d, int type) {
if (type == 0) printf("%d\n", d.i);
else if (type == 1) printf("%f\n", d.f);
else printf("%s\n", d.str);
}
int main() {
union Data data;
data.i = 10;
printUnion(data, 0);
return 0;
}
This code defines a union with different types and prints one value based on a type indicator.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Single function call to print a union member.
- How many times: Called once in this example.
Since the code prints one value from the union, the steps do not increase with input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 1 print operation |
| 100 | Still about 1 print operation |
| 1000 | Still about 1 print operation |
Pattern observation: The number of steps stays the same no matter the input size.
Time Complexity: O(1)
This means the program takes the same amount of time no matter how big the input is.
[X] Wrong: "Accessing different union members takes more time as the union size grows."
[OK] Correct: Accessing any member of a union is a direct operation and does not depend on the size of the union or input.
Understanding how unions work and their time behavior helps you explain memory use and efficiency clearly in interviews.
"What if we added a loop to print multiple union values? How would the time complexity change?"
Practice
union in C?Solution
Step 1: Understand union memory sharing
A union allocates one shared memory block for all its members, so they overlap.Step 2: Compare with struct memory allocation
Unlike structs, unions do not allocate separate memory for each member.Final Answer:
All members share the same memory location -> Option CQuick Check:
Union memory sharing = All members share the same memory location [OK]
- Thinking each member has separate memory
- Assuming unions initialize all members
- Believing unions only store one data type
Data with an int and a float member?Solution
Step 1: Recall union syntax
The correct syntax uses the keyword 'union', the name, and braces with members inside.Step 2: Check each option
union Data { int i; float f; }; uses correct syntax with braces and semicolons. Options A, B, and C have syntax errors or wrong keywords.Final Answer:
union Data { int i; float f; }; -> Option AQuick Check:
Correct union syntax = union Data { int i; float f; }; [OK]
- Using struct instead of union
- Using parentheses instead of braces
- Assigning values in the definition
union Number {
int i;
float f;
};
int main() {
union Number num;
num.i = 65;
printf("%c", num.f);
return 0;
}Solution
Step 1: Understand union member sharing
Setting num.i = 65 stores integer bits in union memory.Step 2: Printing num.f as char
Printing num.f with %c treats float bits as a char, causing unpredictable output.Final Answer:
Undefined behavior or garbage character -> Option DQuick Check:
Accessing different union member types = Undefined behavior or garbage character [OK]
- Expecting integer 65 to print as 'A'
- Assuming union members convert automatically
- Ignoring type mismatch in printf
union Data {
int i;
float f;
};
int main() {
union Data d;
d.i = 10;
d.f = 3.14;
printf("%d", d.i);
return 0;
}Solution
Step 1: Analyze assignments to union members
Assigning d.i then d.f means d.f overwrites the same memory used by d.i.Step 2: Understand printf output
Printing d.i after assigning d.f prints the overwritten value, not 10.Final Answer:
Assigning to d.f overwrites d.i value -> Option BQuick Check:
Union members share memory, last assignment wins = Assigning to d.f overwrites d.i value [OK]
- Thinking union members hold values independently
- Believing %d cannot print union members
- Assuming union needs initialization
int, a float, or a char in the same memory space and print the stored value correctly. Which approach using a union and an additional variable is best?Solution
Step 1: Understand union limitation
Union stores one member at a time, so we must know which member is active.Step 2: Use enum to track active member
An enum variable can track which type is stored, so printing uses correct format.Final Answer:
Use a union for data and an enum to track the active member type -> Option AQuick Check:
Union + enum for type tracking = Use a union for data and an enum to track the active member type [OK]
- Printing all union members blindly
- Not tracking which member is active
- Using separate variables wastes memory
Ready to prove it?
Pass the test and this pattern moves unknown
