Structures and unions help group different data types together. They let you store related information in one place.
Structure vs union comparison
struct StructureName {
dataType1 member1;
dataType2 member2;
...
};
union UnionName {
dataType1 member1;
dataType2 member2;
...
};A structure stores all members separately, each with its own memory.
A union shares the same memory space for all members, so only one member can hold a value at a time.
struct Person {
char name[20];
int age;
float height;
};union Data {
int i;
float f;
char str[20];
};This program shows how a structure keeps all values separately, while a union shares memory for all members. Changing one union member overwrites the others.
#include <stdio.h>
#include <string.h>
struct Person {
char name[20];
int age;
float height;
};
union Data {
int i;
float f;
char str[20];
};
int main() {
struct Person p1;
strcpy(p1.name, "Alice");
p1.age = 30;
p1.height = 5.5f;
printf("Structure Person:\n");
printf("Name: %s\n", p1.name);
printf("Age: %d\n", p1.age);
printf("Height: %.1f\n", p1.height);
union Data d;
d.i = 10;
printf("\nUnion Data after setting int: %d\n", d.i);
d.f = 220.5f;
printf("Union Data after setting float: %.1f\n", d.f);
strcpy(d.str, "Hello");
printf("Union Data after setting string: %s\n", d.str);
printf("\nNote: After setting string, int and float values are overwritten.\n");
return 0;
}Structures use more memory because they store all members separately.
Unions save memory by sharing space but only one member can be used at a time.
Accessing a union member that was not last set can give unexpected results.
Structures store all members separately and keep all data at once.
Unions share the same memory for all members, so only one value is stored at a time.
Use structures when you need to keep all data together, and unions when you want to save memory and only use one value at a time.
Practice
struct and a union in C?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 BQuick Check:
Struct = separate memory, Union = shared memory [OK]
- Thinking union stores all members separately
- Confusing struct and union memory sharing
- Assuming both behave the same in memory
Data with an int and a float member?Solution
Step 1: Recall union syntax
The correct syntax uses the keywordunion, 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; }; usesstructinstead ofunion. 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 DQuick Check:
union syntax = keyword + name + braces + members [OK]
- Using struct keyword instead of union
- Using parentheses instead of braces
- Adding equals sign in definition
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?
Solution
Step 1: Understand union member assignment
Assigningd.i = 10;stores 10 in the union memory. Thend.f = 3.14;overwrites the same memory with the float value.Step 2: Check the printf output
Printingd.iafter assigningd.freads the memory as int, but the memory holds float bits, causing undefined or garbage output.Final Answer:
Undefined or garbage value -> Option AQuick Check:
Union stores one value; last assignment wins [OK]
- Expecting both values to be stored
- Printing float as int correctly
- Ignoring memory overwrite in union
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;
}Solution
Step 1: Check struct and union naming rules
In C, struct and union tags share the same namespace. Defining both with the same namePointcauses 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 AQuick Check:
Struct and union tags must have unique names [OK]
- Thinking union members can't be assigned
- Believing struct brace initialization is invalid
- Assuming printf can't print multiple 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 CQuick Check:
One value at a time + memory saving = union [OK]
- Choosing struct and wasting memory
- Using separate variables unnecessarily
- Using array which doesn't fit this need
Ready to prove it?
Pass the test and this pattern moves unknown
