A union is a special data type where all members share the same memory location. Only one member can hold a value at a time.
Click to reveal answer
beginner
How does memory allocation work in a union?
The size of a union is equal to the size of its largest member because all members share the same memory space.
Click to reveal answer
beginner
Can you store values in multiple members of a union at the same time?
No, only one member can store a value at a time. Writing to one member overwrites the others.
Click to reveal answer
beginner
How do you access members of a union?
You access union members using the dot (.) operator if you have a union variable, or arrow (->) if you have a pointer to a union.
Click to reveal answer
intermediate
Why would you use a union instead of a struct?
Unions save memory when you need to store different types but only one at a time, unlike structs which allocate memory for all members.
Click to reveal answer
What happens when you assign a value to one member of a union?
AIt stores values in all members simultaneously.
BIt creates a copy of the value in each member.
CIt overwrites the value of other members.
DIt causes a compilation error.
✗ Incorrect
In a union, all members share the same memory, so assigning a value to one member overwrites the others.
What determines the size of a union?
AThe size of its largest member.
BThe sum of sizes of all members.
CThe size of the first member.
DAlways 4 bytes.
✗ Incorrect
The union's size equals the size of its largest member because all members share the same memory.
Which operator is used to access a member of a union variable?
A& (ampersand)
B. (dot)
C* (asterisk)
D-> (arrow)
✗ Incorrect
The dot operator is used to access members of a union variable directly.
Why might you choose a union over a struct?
ATo enforce type safety.
BTo store multiple values simultaneously.
CTo create a class.
DTo save memory when only one member is used at a time.
✗ Incorrect
Unions save memory by sharing space among members, useful when only one member is needed at a time.
What will happen if you read a union member different from the one last written?
AYou may get unexpected or garbage data.
BYou get the last written value correctly.
CIt causes a runtime error.
DIt automatically converts the value.
✗ Incorrect
Reading a different member than the one last written can produce unpredictable results because the memory is shared.
Explain what a union is and how it manages memory.
Think about how a single box can hold different items but only one at a time.
You got /3 concepts.
Describe a situation where using a union is better than using a struct.
Imagine you have a tool that can be a hammer or a screwdriver, but you only use one function at a time.
You got /3 concepts.
Practice
(1/5)
1. What is the main characteristic of a union in C++?
easy
A. All members share the same memory location
B. Each member has its own separate memory
C. Unions can only store integers
D. Unions automatically initialize all members
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 other data structures
Unlike structs, unions do not allocate separate memory for each member.
Final Answer:
All members share the same memory location -> Option A
Quick Check:
Union memory sharing = All members share the same memory location [OK]
Hint: Remember: union members overlap in memory [OK]
Common Mistakes:
Thinking each member has separate memory
Assuming unions initialize all members
Believing unions only store one data type
2. Which of the following is the correct syntax to define a union named Data with an int and a float member?
easy
A. union Data = { int i; float f; };
B. struct Data { int i; float f; };
C. union Data ( int i; float f; );
D. union Data { int i; float f; };
Solution
Step 1: Recall union declaration syntax
Unions are declared using the keyword union, followed by 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 B, C, and D have syntax errors or wrong keywords.
Final Answer:
union Data { int i; float f; }; -> Option D
Quick Check:
Correct union syntax = union Data { int i; float f; }; [OK]
Hint: Use 'union Name { members; };' syntax [OK]
Common Mistakes:
Using struct keyword instead of union
Using parentheses instead of braces
Assigning values in declaration
3. What will be the output of the following code?
union Number {
int i;
float f;
};
Number n;
n.i = 65;
std::cout << n.f << std::endl;
medium
A. A floating-point number representing the bits of 65
B. 65.0
C. 0
D. Compilation error
Solution
Step 1: Understand union memory sharing and type punning
Assigning to n.i sets the bits of the union. Reading n.f interprets those bits as a float.
Step 2: Predict output
The bits for integer 65 do not represent 65.0 as a float, so output is a float number corresponding to those bits, not 65.0.
Final Answer:
A floating-point number representing the bits of 65 -> Option A
Quick Check:
Union type punning = A floating-point number representing the bits of 65 [OK]
Hint: Union shares bits; int bits read as float show strange value [OK]
Common Mistakes:
Expecting output 65.0
Assuming union members hold independent values
Thinking code causes compile error
4. Identify the error in this union usage:
union Data {
int i;
char c;
};
Data d;
d.i = 100;
d.c = 'A';
std::cout << d.i << std::endl;
medium
A. Output will be 100
B. Error: Cannot assign to union members separately
C. No error; output will be 65
D. Compilation error due to missing semicolon
Solution
Step 1: Understand union member assignment
Assigning to d.i then to d.c overwrites the same memory because union members share memory.
Step 2: Determine final value of d.i
After d.c = 'A', the first byte of d.i is set to ASCII 65, so printing d.i shows 65.
Final Answer:
No error; output will be 65 -> Option C
Quick Check:
Union last write wins = No error; output will be 65 [OK]
Hint: Last assigned union member overwrites memory [OK]
Common Mistakes:
Thinking union members hold values independently
Expecting output 100 after assigning 'A'
Assuming syntax error
5. You want to store either an int, a float, or a char in the same memory space efficiently. Which union definition and usage correctly allows this, and how do you safely read the stored value?
hard
A. union Value { int i; float f; char c; }; Value v; v.i = 10; std::cout << v.c << std::endl;
B. union Value { int i; float f; char c; }; Value v; v.f = 3.14f; std::cout << v.f << std::endl;
C. union Value { int i; float f; char c; }; Value v; v.c = 'Z'; std::cout << v.i << std::endl;
D. union Value { int i; float f; char c; }; Value v; std::cout << v.i << std::endl;
Solution
Step 1: Check union definition and assignment
union Value { int i; float f; char c; }; Value v; v.f = 3.14f; std::cout << v.f << std::endl; defines a union with int, float, char and assigns a float value correctly.
Step 2: Verify safe reading of stored value
union Value { int i; float f; char c; }; Value v; v.f = 3.14f; std::cout << v.f << std::endl; reads the same member v.f that was assigned, ensuring correct interpretation.
Step 3: Analyze other options
Other options either assign to one member and read a different one, leading to unexpected values, or read uninitialized memory.
Final Answer:
union Value { int i; float f; char c; }; Value v; v.f = 3.14f; std::cout << v.f << std::endl; -> Option B
Quick Check:
Read the same union member you wrote [OK]
Hint: Always read the union member you last wrote [OK]
Common Mistakes:
Reading a different member than assigned
Using uninitialized union members
Assuming union members hold independent values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.