Bird
Raised Fist0
C++programming~10 mins

Structure vs union comparison in C++ - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Structure vs union comparison
Declare struct with multiple members
↓
Each member gets its own memory
↓
Assign values to members
↓
Access members independently
↓
Declare union with multiple members
↓
All members share the same memory
↓
Assign value to one member
↓
Access members (overlapping data)
↓
Observe how union stores only one value at a time
Structures allocate separate memory for each member, unions share the same memory for all members, so only one member holds a valid value at a time.
Execution Sample
C++
struct MyStruct {
  int a;
  float b;
};

union MyUnion {
  int a;
  float b;
};

MyStruct s = {10, 3.14f};
MyUnion u; u.a = 10;
This code declares a struct and a union, assigns values, and shows how memory is used differently.
Execution Table
StepActionMemory for structMemory for unionOutput/Note
1Declare struct MyStruct with int a and float ba: uninitialized, b: uninitializedN/AStruct members have separate memory
2Declare union MyUnion with int a and float bN/Ashared memory for a and bUnion members share same memory
3Assign s.a = 10a: 10, b: uninitializedN/AStruct a set to 10
4Assign s.b = 3.14a: 10, b: 3.14N/AStruct b set independently
5Assign u.a = 10N/Ashared memory = 10 (int)Union memory holds int 10
6Access u.bN/Ashared memory interpreted as floatValue of u.b depends on bit pattern of int 10
7Assign u.b = 3.14N/Ashared memory = 3.14 (float)Union memory holds float 3.14
8Access u.aN/Ashared memory interpreted as intValue of u.a depends on bit pattern of float 3.14
9EndStruct keeps both values intactUnion only keeps last assigned valueStruct stores all members; union stores one at a time
💡 Execution ends after demonstrating memory differences and access behavior
Variable Tracker
VariableStartAfter Step 3After Step 4After Step 5After Step 7Final
s.auninitialized1010101010
s.buninitializeduninitialized3.143.143.143.14
u.auninitializeduninitializeduninitialized10bit pattern of 3.14bit pattern of 3.14
u.buninitializeduninitializeduninitializedbit pattern of 103.143.14
Key Moments - 3 Insights
Why does changing one union member affect the others?
Because all union members share the same memory, assigning to one overwrites the data for all others, as shown in steps 5 to 8 in the execution_table.
Can a struct hold multiple values at the same time?
Yes, each struct member has its own memory space, so all members keep their values independently, as seen in steps 3 and 4.
Why does accessing a different union member after assignment give strange values?
Because the bits are interpreted differently depending on the member type, so reading u.b after assigning u.a shows the float interpretation of the int bits (step 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 5. What value is stored in the union's shared memory?
AUninitialized
BFloat 3.14
CInteger 10
DBoth 10 and 3.14
💡 Hint
Check the 'Memory for union' column at step 5 in execution_table
At which step does the struct have both members assigned values?
AStep 4
BStep 3
CStep 5
DStep 7
💡 Hint
Look at 'Memory for struct' column in execution_table for when both a and b have values
If you assign a value to u.b after u.a, what happens to u.a's value?
AIt stays the same
BIt changes to reflect the bit pattern of u.b
CIt becomes uninitialized
DIt doubles
💡 Hint
Refer to steps 7 and 8 in execution_table and variable_tracker for u.a and u.b
Concept Snapshot
Structure vs Union in C++:
- struct: each member has its own memory
- union: all members share the same memory
- struct stores all member values simultaneously
- union stores only one member value at a time
- Accessing different union members interprets same bits differently
Full Transcript
This visual execution compares structures and unions in C++. Structures allocate separate memory for each member, so all members keep their values independently. Unions share the same memory for all members, so only one member holds a valid value at a time. Assigning to one union member overwrites the shared memory, affecting all members. Accessing a different union member after assignment shows the bits interpreted as that member's type, which can look like strange values. The execution table traces each step, showing how struct members keep their values separately, while union members overlap in memory. The variable tracker shows the values changing after each assignment. Key moments clarify why union members affect each other and why structs keep all values. The quiz tests understanding of memory usage and value changes in both types.

Practice

(1/5)
1. Which of the following best describes the main difference between a struct and a union in C++?
easy
A. A struct stores all members separately; a union shares memory among members.
B. A struct shares memory among members; a union stores all members separately.
C. Both struct and union store members separately but differ in syntax.
D. Both struct and union share memory but differ in member access.

Solution

  1. Step 1: Understand memory allocation in struct

    A struct allocates separate memory for each member, so all members can hold values simultaneously.
  2. Step 2: Understand memory allocation in union

    A union shares the same memory space for all members, so only one member can hold a valid value at a time.
  3. Final Answer:

    A struct stores all members separately; a union shares memory among members. -> Option A
  4. Quick Check:

    Struct = separate memory, Union = shared memory [OK]
Hint: Struct = all values stored; Union = one value stored [OK]
Common Mistakes:
  • Thinking union stores all members separately
  • Confusing struct and union memory sharing
  • Assuming both have same memory behavior
2. Which of the following is the correct syntax to define a union named Data with an int and a float member?
easy
A. struct Data { int i; float f; };
B. union Data ( int i; float f; );
C. union Data { int i; float f; };
D. union Data = { int i; float f; };

Solution

  1. Step 1: Recall union syntax

    The correct syntax uses the keyword union, followed by the name, and braces enclosing members separated by semicolons.
  2. Step 2: Check each option

    union Data { int i; float f; }; matches correct syntax. struct Data { int i; float f; }; uses struct, not union. union Data ( int i; float f; ); uses parentheses instead of braces. union Data = { int i; float f; }; uses an assignment which is invalid.
  3. Final Answer:

    union Data { int i; float f; }; -> Option C
  4. Quick Check:

    Union syntax = keyword + braces + members [OK]
Hint: Use braces {} with union keyword for definition [OK]
Common Mistakes:
  • Using struct keyword instead of union
  • Using parentheses instead of braces
  • Trying to assign values in definition
3. What will be the output of the following C++ code?
union Number {
  int i;
  float f;
};

int main() {
  Number n;
  n.i = 65;
  std::cout << n.f << std::endl;
  return 0;
}
medium
A. A floating-point number representing the bit pattern of 65
B. 0
C. 65
D. Compilation error

Solution

  1. Step 1: Understand union memory sharing

    Assigning 65 to n.i stores the integer bits in the shared memory.
  2. Step 2: Interpret bits as float

    Printing n.f reads the same bits as a float, resulting in a floating-point number representing the bit pattern of 65, not the integer 65.
  3. Final Answer:

    A floating-point number representing the bit pattern of 65 -> Option A
  4. Quick Check:

    Union shares bits; reading different type shows bit pattern [OK]
Hint: Union members share bits; reading different type shows bit pattern [OK]
Common Mistakes:
  • Expecting integer 65 to print as float 65.0
  • Assuming union stores separate copies
  • Thinking code causes compilation error
4. Identify the error in the following code snippet:
struct Data {
  int x;
  union {
    int i;
    float f;
  } u;
};

int main() {
  Data d;
  d.x = 10;
  d.u.i = 20;
  d.u.f = 3.14;
  std::cout << d.x << ", " << d.u.i << std::endl;
  return 0;
}
medium
A. Cannot assign float to union member.
B. Accessing union member after assigning another member leads to undefined value.
C. Missing semicolon after union definition.
D. Struct cannot contain a union as a member.

Solution

  1. Step 1: Analyze union member assignments

    Assigning d.u.i = 20; then d.u.f = 3.14; overwrites the same memory because union members share memory.
  2. Step 2: Understand reading union members

    Reading d.u.i after assigning d.u.f gives an undefined or unexpected value because only the last assigned member is valid.
  3. Final Answer:

    Accessing union member after assigning another member leads to undefined value. -> Option B
  4. Quick Check:

    Union stores one value; reading old member is invalid [OK]
Hint: Only last assigned union member holds valid data [OK]
Common Mistakes:
  • Thinking struct cannot have union member
  • Ignoring union memory sharing rules
  • Expecting both union members to hold values simultaneously
5. You want to store either an integer ID or a floating-point score in a variable but never both at the same time, and you want to save memory. Which is the best approach in C++?
hard
A. Use a class with private int and float members.
B. Use a struct with both int and float members.
C. Use two separate variables, one int and one float.
D. Use a union with int and float members.

Solution

  1. Step 1: Understand memory needs

    Since only one value (int or float) is needed at a time, memory can be saved by sharing storage.
  2. Step 2: Choose union for shared memory

    A union allows storing either int or float in the same memory space, saving memory compared to a struct which stores both separately.
  3. Step 3: Evaluate other options

    Using two separate variables wastes memory. A class with private members behaves like struct in memory. Struct stores both values simultaneously, using more memory.
  4. Final Answer:

    Use a union with int and float members. -> Option D
  5. Quick Check:

    Union saves memory when only one value needed [OK]
Hint: Use union to save memory when storing one of many types [OK]
Common Mistakes:
  • Choosing struct and wasting memory
  • Using separate variables unnecessarily
  • Confusing class with memory optimization
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard