📖 Scenario: Imagine you are organizing information about a simple electronic device. You want to store either its serial number or its manufacturing date, but not both at the same time to save memory.
🎯 Goal: You will create a struct and a union to hold device information, then compare their sizes to understand how they use memory differently.
📋 What You'll Learn
Create a struct named DeviceStruct with two members: an int serialNumber and a char manufactureDate[10].
Create a union named DeviceUnion with the same two members: an int serialNumber and a char manufactureDate[10].
Declare variables of type DeviceStruct and DeviceUnion.
Print the sizes of DeviceStruct and DeviceUnion using sizeof.
Print the values stored in the union after assigning to each member to observe how data overlaps.
💡 Why This Matters
🌍 Real World
Understanding structs and unions helps when working with hardware devices, network protocols, or file formats where memory usage and data layout matter.
💼 Career
Many programming jobs require knowledge of memory management and data structures, especially in embedded systems, systems programming, and performance-critical applications.
Progress0 / 4 steps
1
Create the struct and union definitions
Write the definitions for a struct named DeviceStruct and a union named DeviceUnion. Both should have an int serialNumber and a char manufactureDate[10].
C
Hint
Use struct and union keywords to define the types with the exact member names and types.
2
Declare variables of the struct and union
Declare a variable named deviceS of type struct DeviceStruct and a variable named deviceU of type union DeviceUnion.
C
Hint
Use the exact variable names deviceS and deviceU with their respective types.
3
Assign values to deviceU members to observe overlap
Assign 12345 to deviceU.serialNumber. Then assign the string "20240601" to deviceU.manufactureDate using strcpy. Include #include <string.h> at the top.
C
Hint
Remember to include #include <string.h> to use strcpy.
4
Print sizes and values to compare struct and union
Inside main, print the sizes of DeviceStruct and DeviceUnion using sizeof. Then print deviceU.serialNumber and deviceU.manufactureDate to see how the union stores data.
C
Hint
The serialNumber value will change after copying the string because the union shares memory.
Practice
(1/5)
1. What is the main difference between a struct and a union in C?
easy
A. Both struct and union share the same memory for all members.
B. A struct stores all members separately, while a union shares the same memory for all members.
C. Both struct and union store members in separate memory locations.
D. A union stores all members separately, while a struct shares the same memory for all members.
Solution
Step 1: Understand struct memory allocation
A struct allocates separate memory for each member, so all members exist independently.
Step 2: Understand union memory allocation
A union uses the same memory location for all members, so only one member can hold a value at a time.
Final Answer:
A struct stores all members separately, while a union shares the same memory for all members. -> Option B
Quick Check:
Struct = separate memory, Union = shared memory [OK]
Hint: Struct = all data stored; Union = one data stored at a time [OK]
Common Mistakes:
Thinking union stores all members separately
Confusing struct and union memory sharing
Assuming both behave the same in memory
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 syntax
The correct syntax uses the keyword union, followed by the name and braces containing members separated by semicolons.
Step 2: Check each option
union Data { int i; float f; }; matches the correct syntax. struct Data { int i; float f; }; uses struct instead of union. union Data ( int i; float f; ); uses parentheses instead of braces. union Data = { int i; float f; }; uses an equals sign incorrectly.
Final Answer:
union Data { int i; float f; }; -> Option D
Quick Check:
union syntax = keyword + name + braces + members [OK]
Hint: Use braces {} and keyword union for definition [OK]
Common Mistakes:
Using struct keyword instead of union
Using parentheses instead of braces
Adding equals sign in definition
3. Consider the following code:
union Data {
int i;
float f;
};
int main() {
union Data d;
d.i = 10;
d.f = 3.14;
printf("%d", d.i);
return 0;
}
What will be the output?
medium
A. Undefined or garbage value
B. 10
C. 3
D. 3.14
Solution
Step 1: Understand union member assignment
Assigning d.i = 10; stores 10 in the union memory. Then d.f = 3.14; overwrites the same memory with the float value.
Step 2: Check the printf output
Printing d.i after assigning d.f reads the memory as int, but the memory holds float bits, causing undefined or garbage output.
Final Answer:
Undefined or garbage value -> Option A
Quick Check:
Union stores one value; last assignment wins [OK]
Hint: Last union member assigned overwrites memory [OK]
Common Mistakes:
Expecting both values to be stored
Printing float as int correctly
Ignoring memory overwrite in union
4. Identify the error in this code snippet:
struct Point {
int x;
int y;
};
union Point {
int x;
int y;
};
int main() {
struct Point p1 = {1, 2};
union Point p2;
p2.x = 3;
p2.y = 4;
printf("%d %d", p1.x, p1.y);
printf("%d %d", p2.x, p2.y);
return 0;
}
medium
A. Cannot define struct and union with the same name in the same scope.
B. Union members cannot be assigned values.
C. Struct members must be initialized separately, not with braces.
D. printf cannot print multiple variables.
Solution
Step 1: Check struct and union naming rules
In C, struct and union tags share the same namespace. Defining both with the same name Point causes a redefinition error.
Step 2: Verify other statements
Union members can be assigned values. Struct initialization with braces is valid. printf can print multiple variables with format specifiers.
Final Answer:
Cannot define struct and union with the same name in the same scope. -> Option A
Quick Check:
Struct and union tags must have unique names [OK]
Hint: Struct and union names share namespace; avoid duplicates [OK]
Common Mistakes:
Thinking union members can't be assigned
Believing struct brace initialization is invalid
Assuming printf can't print multiple values
5. You want to store either an integer ID or a floating-point score in a variable but never both at the same time to save memory. Which is the best choice and why?
hard
A. Use a struct because it stores both values separately.
B. Use two separate variables to avoid confusion.
C. Use a union because it shares memory and stores only one value at a time.
D. Use an array to store both values.
Solution
Step 1: Analyze memory needs
Since only one value (ID or score) is needed at a time, saving memory is important.
Step 2: Choose between struct and union
A struct stores both values separately, using more memory. A union shares memory for all members, storing only one value at a time, saving memory.
Final Answer:
Use a union because it shares memory and stores only one value at a time. -> Option C
Quick Check:
One value at a time + memory saving = union [OK]
Hint: Union saves memory when storing one of many values [OK]
Common Mistakes:
Choosing struct and wasting memory
Using separate variables unnecessarily
Using array which doesn't fit this need
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.