Learn sizeof in C with simple examples. Understand usage, return type, format specifier, array size, strlen vs sizeof, and avoid common mistakes easily.
If you have ever wondered how big a data type, variable, or structure is in memory, you’ve already touched the topic of sizeof in C. It’s one of those things every C programmer uses, yet many misunderstand. So today, let’s sit down, simplify everything, and walk through sizeof from the basics to the tricky parts that show up in interviews.
If you’re learning C programming and want to strengthen your fundamentals before practicing Structures and Unions Interview Questions, you should explore this detailed beginner-friendly guide on structures: Structures in C – Complete Guide It explains structure syntax, memory layout, padding, nesting, and real-world examples in a very simple way. Reading this will give you a strong foundation before jumping into advanced interview questions.
What is sizeof in C?
The sizeof operator tells you how much memory something takes in bytes. It works for:
data types
variables
expressions
pointers
arrays
structures
unions
function return types
and more
Example:
printf("%zu", sizeof(int));
This prints the number of bytes needed to store an int on your system.
Why sizeof exists
C runs close to hardware. You often need to know how much memory something consumes to:
allocate memory safely
handle arrays
write low-level drivers
work with network packets
optimize memory usage
Without sizeof, developers would guess memory sizes. And guessing in C is dangerous.
How to use sizeof in C
The syntax is simple.
sizeof(type)
sizeof variable
sizeof expression
Examples:
sizeof(int)
sizeof x
sizeof(x+10)
All are valid.
Syntax and examples
int a = 10;
printf("%zu", sizeof(a)); // sizeof variable
printf("%zu", sizeof(int)); // sizeof type
printf("%zu", sizeof(a+1)); // sizeof expression
What does sizeof in C return?
sizeof returns the size in bytes.
If int is 4 bytes:
sizeof(int) → 4
If a structure is 16 bytes:
sizeof(struct Example) → 16
Return type of sizeof in C
The return type of sizeof in C is:
size_t
size_t is an unsigned integer type used for sizes. It’s defined in <stddef.h>.
Is sizeof a function in C?
No.
sizeofis an operator, not a function.
This is important because:
it is evaluated at compile time (for most cases)
it does not cause side effects
it doesn’t evaluate expressions fully
Example:
sizeof(a++);
a will NOT increment.
What library is sizeof in C?
No library. sizeof is built directly into the compiler.
You do not need to include any header.
Format specifier for sizeof in C
Since sizeof returns a size_t, you print it using:
%zu
Example:
printf("%zu", sizeof(int));
Many programmers mistakenly use %d, but %zu is correct.
sizeof with basic data types
This depends on architecture, compiler, alignment, and ABI.
Prepare for technical interviews with our Structure and union interview questions in C practice set. This guide covers memory allocation, padding, arrays in structures and unions, differences, and real-world examples. Ideal for beginners and embedded systems developers to master structures and unions concepts with detailed explanations and practice exercises.
If you are preparing for a C programming interview, understanding structures and unions is essential. These user-defined data types allow you to group different types of data under a single name, making your programs organized and memory-efficient.
This practice set #1 contains commonly asked questions on structures and unions in C along with detailed explanations. Whether you are a beginner or brushing up your C skills for interviews, this guide will help you gain confidence.
Why Structures and Unions Are Important in C?
Structures are used to group different data types together to represent a real-world object.
Unions are used to store different data types in the same memory location, saving memory.
Both are widely asked in technical interviews, especially in embedded systems, data structures, and low-level programming roles.
Pro Tip: Interviewers often ask differences, memory allocation, and practical use cases.
1.What is a structure in C?
A structure in C is a user-defined data type that allows you to group variables of different data types under a single name. It is used when you need to represent a complex object with multiple attributes.
A structure stores its members in sequence, but compiler may add padding to follow alignment rules
2.What is a union in C?
A union in C is a user-defined data type similar to a structure, but with one important difference:
All members of a union share the same memory location. So the size of a union = size of its largest member.
Definition
A union is declared using the keyword union.
Syntax
union union_name {
data_type member1;
data_type member2;
...
};
Example
union Data {
int i;
float f;
char ch;
};
Here, i, f, and chall use the same memory.
Key Concept: Shared Memory
Only one member holds a valid value at a time.
For example:
union Data d;
d.i = 10;
d.f = 20.5;
When you assign f, it overwrites the memory that was holding i.
Memory Allocation
If members are:
int → 4 bytes
float → 4 bytes
char → 1 byte
Union size = 4 bytes (max size).
Union vs Structure
Feature
Structure
Union
Memory
Each member has its own memory
All members share one memory
Size
Sum of all members
Size of largest member
Use case
Store multiple values
Access different data types in same memory
Member validity
All members valid at once
Only one member valid at a time
Where is a union used?
Common in embedded systems:
Memory-critical applications
Interpreting the same memory as different data types
(e.g., byte-wise access to registers or network packets)
Example:
union Packet {
int full;
char byte[4];
};
3.What is the difference between structure and union?
Structures and unions are both user-defined data types in C, but they differ mainly in memory allocation and usage behavior.
1. Memory Allocation
Structure
Each member gets its own memory.
Total size = sum of all members (with padding).
Union
All members share the same memory.
Total size = size of the largest member.
Example: If you have int (4B) + float (4B) + char (1B):
Structure size ≈ 9–12 bytes (due to padding)
Union size = 4 bytes
2. Member Storage Behavior
Structure
All members hold values independently. You can use all at the same time.
Union
Only one member holds a valid value at a time. Writing to one member overwrites others.
3. Memory Efficiency
Structure → Not memory efficient
Union → Highly memory efficient
Used in embedded systems where memory is limited.
4. Use Case
Structure
Used when you need to store multiple attributes together.
Examples:
Employee record
Student record
Configuration parameters
Union
Used when you want to interpret the same memory in different ways.
Examples:
Hardware register access
Protocol packets
Memory-saving applications
Type punning
5. Initialization
Structure
Can initialize multiple members at once.
Union
Can initialize only one member at a time.
Tabular Difference (Easy to Remember)
Feature
Structure
Union
Memory
Each member has its own memory
Shared memory
Size
Sum of all members
Size of largest member
Member validity
All members valid
Only one valid at a time
Use case
Multiple attributes
Memory sharing / reinterpretation
Access
No overwriting
Overwrites other members
Efficiency
Less efficient
Very efficient
Initialization
Multiple members
Only one member
4.How is memory allocated in a structure?
Memory allocation in a structure in C follows a very specific and important rule:
Memory in a Structure = Sequential allocation + Alignment + Padding
Let’s break it down clearly.
1. Members are stored in sequence
Structure members are stored in the same order as they are declared.
Example:
struct A {
char c; // 1 byte
int x; // 4 bytes
char d; // 1 byte
};
Memory layout (conceptually):
[c][padding][padding][padding][x x x x][d][padding][padding][padding]
2. Alignment requirement
Each data type must be stored at an address that is a multiple of its alignment boundary.
Common alignments:
char → 1 byte
short → 2 bytes
int → 4 bytes
float → 4 bytes
double → 8 bytes (on many systems)
3. Padding is added automatically
Padding bytes are inserted to ensure alignment of next members.
Example with Detailed Memory Calculation
Structure:
struct A {
char c; // 1 byte
int x; // 4 bytes
char d; // 1 byte
};
Step-by-step memory allocation:
Member 1: char c
Size = 1 byte
Stored at offset 0
Padding before next member
Next member = int int needs 4-byte alignment Current offset = 1 Next multiple of 4 = 4 So compiler inserts 3 bytes padding
Member 2: int x
Stored at offset 4 → 7
Size = 4 bytes
Member 3: char d
Stored at offset 8
Size = 1 byte
Padding at the end (structure alignment)
Structure must be aligned to the size of its largest member (here, 4 bytes). Current size = 9 bytes Next multiple of 4 = 12 So compiler adds 3 bytes padding at end.
Final Structure Size = 12 bytes
General Rules of Structure Memory Allocation
Members follow declared order
Compiler inserts padding between members
Compiler may insert padding at the end
Structure size = Next multiple of largest member alignment
Important Interview Point
Structure padding and alignment are compiler-dependent, but this is how GCC/Clang commonly work.
5.How is memory allocated in a union?
Memory allocation in a union is quite different from a structure. Let’s break it down carefully.
Key Concept of Union Memory Allocation
All members of a union share the same memory location.
Size of a union = size of its largest member (plus any padding needed for alignment).
Only one member can hold a valid value at a time.
Example
union Data {
int i; // 4 bytes
float f; // 4 bytes
char ch; // 1 byte
};
Step-by-step Memory Allocation
Member int i → needs 4 bytes
Member float f → also 4 bytes
Member char ch → 1 byte
All members share the same memory:
| i (4B) / f (4B) / ch (1B) |
Total union size = 4 bytes (size of largest member)
Accessing ch overwrites the same memory that i or f uses.
Rules of Union Memory Allocation
Shared Memory: All members occupy the same memory block.
Size = Largest Member: Compiler calculates the union size based on the largest member, plus padding for alignment if needed.
Single Valid Member: At any time, only one member can hold meaningful data.
Alignment Rules Apply: Memory alignment rules are followed for the largest member.
Example in Action
union Data d;
d.i = 100; // store int
printf("%d", d.i); // 100
d.f = 10.5; // store float, overwrites int
printf("%d", d.i); // undefined, memory overwritten
Difference with Structure
Feature
Structure
Union
Memory
Each member has its own memory
All members share same memory
Size
Sum of all members
Size of largest member
Member validity
All members valid
Only one member valid
6.Can we declare arrays inside a structure?
Yes, we can declare arrays inside a structure in C. In fact, arrays are commonly used as structure members to store multiple values under a single field.
Syntax
struct StructureName {
data_type array_name[array_size];
// other members
};
C compilers align structure members based on the largest data type in the structure (for memory efficiency). Padding may be inserted:
Rules:
Each member is aligned to its natural boundary (size of data type).
Compiler may add padding between members and at the end of structure.
Example:
struct Student {
char name[10]; // 10 bytes
int marks[5]; // 20 bytes, int alignment = 4
};
Step-by-step layout:
name[10] → offset 0–9
Padding → next multiple of 4 → offset 10–11 (2 bytes padding)
marks[5] → offset 12–31
Final structure size = 32 bytes
So even with arrays, padding ensures proper alignment.
Array of Structures vs Structure with Array
Let’s clarify this common confusion.
A. Array of Structures
struct Student {
char name[20];
int marks;
};
struct Student students[3]; // Array of 3 Student structures
Memory layout: each structure is stored contiguously
Example (if size of one Student = 24 bytes):
| Student1 | Student2 | Student3 |
Each structure can have different values, accessed as students[0].marks etc.
Useful when you have multiple records.
B. Structure with Array
struct Class {
char name[20];
int marks[3];
};
Memory layout:
| name[20] | marks[0] | marks[1] | marks[2] |
One structure holds multiple related values in arrays.
All values are inside a single structure.
Useful when you have one entity with multiple properties.
Key Difference
Feature
Array of Structures
Structure with Array
Memory
Multiple structures in contiguous memory
Single structure holds array elements
Access
students[0].marks
class1.marks[0]
Use Case
Multiple entities
One entity with multiple properties
Visualization Example
Array of Structures:
Student[0]: name | marks
Student[1]: name | marks
Student[2]: name | marks
Structure with Array:
Class: name | marks[0] | marks[1] | marks[2]
7.Can we declare arrays inside a union?
Yes, we can declare arrays inside a union in C. Just like other members, arrays inside a union share the same memory with the union, and the size of the union is determined by its largest member.
Syntax
union UnionName {
int numbers[5];
char name[10];
};
Example
#include <stdio.h>
#include <string.h>
union Data {
int numbers[3];
char name[10];
};
int main() {
union Data d;
// Assign values to array
d.numbers[0] = 10;
d.numbers[1] = 20;
d.numbers[2] = 30;
printf("Numbers: %d %d %d\n", d.numbers[0], d.numbers[1], d.numbers[2]);
// Assign values to char array (overwrites numbers)
strcpy(d.name, "Nish");
printf("Name: %s\n", d.name);
printf("Numbers[0] after name assignment: %d\n", d.numbers[0]); // Memory overwritten
return 0;
}
Output:
Numbers: 10 20 30
Name: Nish
Numbers[0] after name assignment: (undefined, memory overwritten)
Memory Concept
All members share the same memory block.
Size of union = size of largest member (array included).
Only one member can hold valid data at a time.
Assigning to an array overwrites previous data in the union.
Example of Union with Array and Single Variable
union Example {
int arr[5]; // 5 integers
int x; // single integer
};
Union size = max(size of arr, size of x) → size of arr (20 bytes if int = 4B)
Both x and arr share the same memory.
8.Can a structure hold multiple data types?
Yes, a structure in C can hold multiple data types. That’s actually the main purpose of a structure.
Explanation
A structure is a user-defined data type that allows you to group variables of different types under a single name.
This is useful when you want to represent a real-world object with multiple attributes of different types.
Structures can combine int, float, char, arrays, pointers, and even other structures.
All members are stored in the order they are declared, but padding may be added for memory alignment.
Ideal for modeling complex objects like employees, students, or hardware registers.
9.Can a union hold multiple data types?
Yes, a union in C can hold multiple data types, but with an important distinction compared to structures:
Explanation
A union is a user-defined data type that allows you to define multiple members of different data types, but all members share the same memory location.
Only one member can hold a valid value at a time. Assigning a value to one member overwrites the memory of other members.
Example
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
char name[10];
};
int main() {
union Data d;
d.i = 100;
printf("i = %d\n", d.i);
d.f = 3.14; // overwrites d.i
printf("f = %.2f\n", d.f);
printf("i after f assignment = %d\n", d.i); // memory overwritten
strcpy(d.name, "Nish"); // overwrites d.f
printf("name = %s\n", d.name);
return 0;
}
Output:
i = 100
f = 3.14
i after f assignment = (undefined)
name = Nish
Key Points
A union can hold multiple data types as members.
Memory is shared; size = largest member.
Only one member is valid at a time.
Useful in memory-critical applications, embedded systems, or interpreting the same memory in different ways.
10.What is the size of an empty structure?
In C, the size of an empty structure (a structure with no members) is not zero.
Explanation
Even if a structure has no members, the compiler allocates at least 1 byte for it.
This ensures that each structure variable has a unique address in memory.
Without this, you couldn’t have distinct instances of the empty structure.
Example
#include <stdio.h>
struct Empty {
// no members
};
int main() {
struct Empty e1, e2;
printf("Size of empty structure: %zu bytes\n", sizeof(struct Empty));
printf("Address of e1: %p\n", (void*)&e1);
printf("Address of e2: %p\n", (void*)&e2);
return 0;
}
Sample Output (may vary by compiler):
Size of empty structure: 1 bytes
Address of e1: 0x7ffee1c8a9a0
Address of e2: 0x7ffee1c8a9a1
Key Points
Size = 1 byte (ensures unique memory address).
Different from C++, where empty structure (or class) may also have size 1 due to object identity.
If you add members, the size is calculated based on member sizes + padding/alignment.
11.What is the size of an empty union?
In C, the size of an empty union is also not zero, but it behaves slightly differently than a structure.
Explanation
Even if a union has no members, the compiler allocates at least 1 byte.
This ensures that each union variable has a unique address in memory, similar to structures.
Reason: Without at least 1 byte, you couldn’t create multiple distinct union variables.
Example
#include <stdio.h>
union EmptyUnion {
// no members
};
int main() {
union EmptyUnion u1, u2;
printf("Size of empty union: %zu bytes\n", sizeof(union EmptyUnion));
printf("Address of u1: %p\n", (void*)&u1);
printf("Address of u2: %p\n", (void*)&u2);
return 0;
}
Sample Output (may vary by compiler):
Size of empty union: 1 bytes
Address of u1: 0x7ffee1c8a9a0
Address of u2: 0x7ffee1c8a9a1
Key Points
Size = 1 byte even if empty.
Ensures unique addresses for union variables.
If members are added, union size = size of largest member + padding.
Same principle applies as with empty structures.
Size Comparison: Structure vs Union in C
Type
Members
Size
Notes
Empty Structure
None
1 byte
Compiler allocates 1 byte to give a unique address to each variable.
Empty Union
None
1 byte
Same reason as structure: ensures unique memory address.
Structure with members
int, char, float, etc.
Sum of member sizes + padding
Padding added for alignment of members.
Union with members
int, char, float, etc.
Size of largest member + padding
All members share the same memory.
12.Can a structure contain another structure?
Yes, a structure in C can contain another structure as a member. This is commonly called a nested structure.
Explanation
A structure can have another structure as one of its members.
This is useful for modeling complex objects with hierarchical data.
The nested structure can be accessed using the dot operator.
Syntax
struct Inner {
int x;
int y;
};
struct Outer {
struct Inner point; // nested structure
char name[20];
};
Nested structures allow hierarchical data representation.
Access members using outer.inner syntax.
You can also declare arrays of nested structures.
Padding and alignment rules apply for each member, including nested structures.
13.Can a union contain another union?
Yes, a union in C can contain another union as a member. This is similar to nested structures, but the memory-sharing rules of unions apply.
Explanation
A union can have another union as a member, along with other data types.
All members of the outer union share the same memory, including the nested union.
At any given time, only one member of the outer union is valid, whether it’s a simple variable or the nested union.
Syntax
union InnerUnion {
int x;
float y;
};
union OuterUnion {
char ch;
union InnerUnion inner; // nested union
};
Example
#include <stdio.h>
union InnerUnion {
int x;
float y;
};
union OuterUnion {
char ch;
union InnerUnion inner;
};
int main() {
union OuterUnion u;
u.ch = 'A';
printf("ch = %c\n", u.ch);
u.inner.x = 100; // overwrites ch
printf("inner.x = %d\n", u.inner.x);
printf("ch after inner.x assignment = %c\n", u.ch); // memory overwritten
return 0;
}
Output:
ch = A
inner.x = 100
ch after inner.x assignment = (undefined)
Key Points
Memory of outer union is shared among all members, including nested unions.
Only one member of the outer union is valid at a time.
Useful in memory-critical applications where you want to interpret the same memory in different ways.
Size of outer union = largest member (may be the nested union).
14.Can a structure contain a union?
Yes, a structure in C can contain a union as one of its members. This is very common in scenarios where you want a single field to hold multiple types of data while still keeping other fixed fields in the structure.
Explanation
A structure can have fixed-type members and also a union member.
The union inside the structure shares memory for its members, but the rest of the structure’s members have their own memory.
Accessing members of the union is done via the dot operator for the structure and then the union member.
Syntax
union Data {
int i;
float f;
char ch;
};
struct Student {
char name[20];
int roll;
union Data info; // union inside structure
};
Example
#include <stdio.h>
#include <string.h>
union Info {
int marks;
float percentage;
};
struct Student {
char name[20];
int roll;
union Info score; // union member
};
int main() {
struct Student s1;
strcpy(s1.name, "Nish");
s1.roll = 101;
s1.score.marks = 95;
printf("Name: %s\nRoll: %d\nMarks: %d\n", s1.name, s1.roll, s1.score.marks);
s1.score.percentage = 92.5; // overwrites marks
printf("Percentage: %.2f\nMarks after overwrite: %d\n", s1.score.percentage, s1.score.marks);
return 0;
}
Output:
Name: Nish
Roll: 101
Marks: 95
Percentage: 92.50
Marks after overwrite: (undefined)
Key Points
Structure members have their own memory, union members share memory.
Only one member of the union is valid at a time.
Useful in embedded systems, protocol handling, and memory-efficient applications.
Size of structure = sum of other members + size of union + padding for alignment.
15.Can a union contain a structure?
Yes, a union in C can contain a structure as one of its members. This is a common technique when you want a single memory location to store different types of data, including complex data types like structures.
Explanation
A union can have primitive types (int, char, float) and structures as members.
All members of the union share the same memory, including the nested structure.
At any time, only one member of the union is valid, whether it’s a structure or a simple type.
This is often used in memory-efficient programming and embedded systems.
Syntax
struct Address {
char city[20];
int pin;
};
union StudentInfo {
int roll;
struct Address addr; // structure inside union
};
Example
#include <stdio.h>
#include <string.h>
struct Address {
char city[20];
int pin;
};
union StudentInfo {
int roll;
struct Address addr; // structure inside union
};
int main() {
union StudentInfo s;
s.roll = 101;
printf("Roll: %d\n", s.roll);
strcpy(s.addr.city, "Patna"); // overwrites roll
s.addr.pin = 800001;
printf("City: %s\nPIN: %d\n", s.addr.city, s.addr.pin);
printf("Roll after overwriting with addr: %d\n", s.roll); // memory overwritten
return 0;
}
Output:
Roll: 101
City: Patna
PIN: 800001
Roll after overwriting with addr: (undefined)
Key Points
Memory of the union is shared among all members, including the structure.
Only one member of the union is valid at a time.
Size of the union = size of the largest member (structure included).
Useful for memory-saving techniques, embedded systems, and interpreting the same memory differently.
Conclusion: Structure and Union Interview Questions in C
After going through these 15 fundamental questions on structures and unions in C, you should now have a solid understanding of how these user-defined data types work.
Key takeaways:
Structures allow you to group multiple variables of different data types together while giving each member its own memory.
Unions let you store different types of data in the same memory location, saving memory but allowing only one member to be valid at a time.
Understanding memory allocation, padding, and alignment is crucial, especially in embedded systems and low-level programming.
Both structures and unions can be nested, contain arrays, or even include each other to model complex hierarchical data.
Knowing the differences between structure and union, and how memory is shared or allocated, is a common interview topic and helps you write efficient C programs.
By practicing these questions and experimenting with memory layouts and code examples, you can confidently handle interview questions on structures and unions, as well as use them effectively in real-world C applications.
If you’re learning C programming and want to strengthen your fundamentals before practicing Structures and Unions Interview Questions, you should explore this detailed beginner-friendly guide on structures: Structures in C – Complete Guide It explains structure syntax, memory layout, padding, nesting, and real-world examples in a very simple way. Reading this will give you a strong foundation before jumping into advanced interview questions.
1. What is a structure in C?
A structure in C is a user-defined data type that allows you to group different types of variables under a single name, making it easier to organize and manage complex data.
2. What is a union in C?
A union in C is a special data type where all members share the same memory location, allowing only one member to store a valid value at a time, which saves memory.
3. Can a structure hold multiple data types?
Yes, a structure can hold variables of different data types such as int, float, char arrays, or even other structures, allowing hierarchical and complex data representation.
4. Can a union hold multiple data types?
Yes, a union can include multiple data types, but only one member can hold a valid value at a time, because all members share the same memory space.
5. What is the difference between a structure and a union in C?
Structure: Each member has its own memory; all members can be used simultaneously. Union: Members share memory; only one member can be used at a time. Memory efficiency: Union is more memory-efficient than structure for storing mutually exclusive data.
6. How is memory allocated for a structure?
Memory for a structure is allocated as the sum of all member sizes plus any padding added for alignment, ensuring efficient access by the CPU.
7. How is memory allocated for a union?
Memory for a union is allocated based on the size of its largest member, as all members share the same memory space, ensuring only one member is valid at a time.
Explore the best Structures and Unions Interview Questions with 50+ powerful, beginner-friendly to advanced examples. Boost your C skills and prepare with confidence.
If you’re preparing for a C or embedded systems interview, you must be ready for Structures and Unions Interview Questions. These topics look simple, but interviewers ask surprisingly tricky problems around memory layout, padding, alignment, nested usage, and differences between structures vs unions.
Whether you’re a beginner learning C or an experienced engineer brushing up for a system-level role, this guide gives you crystal-clear explanations, real examples, and practical scenarios that hiring managers love to ask .
If you’re learning C programming and want to strengthen your fundamentals before practicing Structures and Unions Interview Questions, you should explore this detailed beginner-friendly guide on structures: Structures in C – Complete Guide It explains structure syntax, memory layout, padding, nesting, and real-world examples in a very simple way. Reading this will give you a strong foundation before jumping into advanced interview questions.
Introduction of Structures and Unions Interview Questions
C is powerful because it gives you full control over memory. With that power comes responsibility and interviewers test whether you truly understand memory behavior.
Two of the biggest tools in C for organizing and controlling memory layouts are:
Structure
Union
This article focuses on all levels of structured interview questions and answers, especially tailored for c interview questions on structures and unions that appear in companies like Qualcomm, STMicroelectronics, Samsung, NXP, KPIT, TCS, and more.
What Are Structures?
In simple words:
A structure in C is a way to group different variables under one name.
Each member of a structure gets its own memory.
Example
struct Employee {
int id;
float salary;
char grade;
};
Memory is allocated for all members separately.
What Are Unions?
A union is like a structure, but all variables share the same memory location.
Think of it like a single container used by multiple items—only one item can exist meaningfully at a time.
Example
union Data {
int id;
float value;
char ch;
};
Size = size of largest member.
This simple difference is the root of almost all structure and union interview questions.
Structures vs Unions
Let’s break it down:
Feature
Structure
Union
Memory
Separate memory for each member
Shared memory for all
Size
Sum of all members (with padding)
Size of largest member
Usage
Store multiple values at once
Store one value at a time
Example Use
Employee records
Embedded protocol decoding
You’ll often hear the term unions vs structures in C in interviews when discussing memory behavior.
Beginner-Level Structures and Unions Interview Questions
Let’s warm up with friendly, simple questions.
What is a structure in C?
A structure is a user-defined datatype that groups different datatypes under one name.
Great for modeling real-world things like employee, car, sensor, etc.
What is a union in C?
A union is similar to a structure, but all members share the same memory.
This is the simplest form of union questions asked in interviews.
Why do we use structures?
To store data logically and keep multiple variables grouped.
Why do we use unions?
To save memory, especially in:
Embedded systems
Protocol parsers
Hardware registers
This is common in questions on unions in interviews.
What is the size of a structure and union?
Structure → sum of members + padding
Union → size of largest member
Can a structure contain another structure?
Yes. This leads to nested structures, a common part of structural questions examples.
Can a union contain another union?
Yes, but rarely used unless memory reuse is needed.
Intermediate-Level Structure and Union Interview Questions
Here we get into deeper concepts like padding, alignment, pointers, typedef, and passing structures to functions.
How does padding affect structures?
C aligns structure members to the CPU’s natural alignment. This affects size and layout.
Example:
struct test {
char a; // 1 byte
int b; // 4 bytes
};
Size is 8 bytes, not 5, because of alignment.
Can we remove structure padding?
Yes, using:
#pragma pack(1)
__attribute__((packed)) (GCC)
How to pass a structure to a function?
Three ways:
By value
By pointer
By reference using pointer
Can we compare two structures directly?
No. You must compare member-wise.
What happens if you read one union member after writing another?
This is undefined behavior.
This comes up in structures and unions in C interview questions and answers.
How does a union save memory?
Because it allocates memory only once for the largest member.
When should you choose structures vs unions
Use structure when you need multiple values at the same time. Use union when you need different interpretations of the same memory block.
Advanced Structures and Unions Interview Questions and Answers
These are the tricky questions interviewers love to ask.
Explain memory layout of structure vs union
Structure:
| a | b | c |
Union:
| shared memory |
What is a flexible array member?
Used to create dynamic-sized structure:
struct packet {
int size;
char data[];
};
Why do embedded systems use unions for register mapping?
Because hardware registers can be accessed in multiple formats.
Bit Manipulation Interview Questions : Prepare for your coding interviews with these top bit manipulation interview questions and detailed answers. Master bitwise operators in 2025!
The Silence of the Server Room
It’s 2:00 AM. The only sound in the dimly lit server room is the low, relentless hum of a million processes running in parallel. Across the globe, an application supporting millions of users is teetering on the edge of a catastrophic failure.
Alex, the senior architect, is staring at a monitor displaying a massive list of numbers—a critical component that keeps track of the system’s core data. The entire system is choking. Every second of delay costs the company thousands, and the fix needs to be deployed now. The normal ways they write code—using big, complicated steps, slow loops, and conditional checks—are crumbling under the enormous amount of data. They are burning time, and they are running out of options.
“‘We need to quickly check and change the status of three million different items at the same exact time,’ Alex whispers, her voice tight with stress. ‘We can’t afford to make the computer check them one by one. That would take forever.’”
The junior engineer next to her suggests common optimization tricks, but Alex shakes her head. The roadblock isn’t the network; it’s the fundamental calculation itself.
Then, she remembers. It’s not about manipulating the data using slow, complex math; it’s about speaking the machine’s native language. It’s about the bits.
With intense focus, she types one single, powerful line of code. It doesn’t use any of the usual math tricks you learn—no dividing, multiplying, or remainder finding. She’s using the purest, fastest form of computation: bit manipulation, using simple symbols like a bitwise XOR (^) and a right shift (>>).
In that one, instantaneous operation, three million states are evaluated and flipped. The system latency spike vanishes. The server room’s low hum settles into a steady, secure tone.
This moment—the difference between system-wide collapse and silent, instantaneous efficiency—was bridged by a deep, almost instinctive understanding of Bit Manipulation.
It is the secret language of high-performance code, the hidden tool that separates a great programmer from an average one. In an interview, it is the ultimate test of whether you truly understand how a computer works at its core. It’s not about making things complicated; it’s about achieving simplicity at the fastest possible level.
This guide will unlock that power for you. Forget the scary names and symbols of bitwise operators. We’ll show you how to solve those tricky, time-critical coding problems by giving your computer lightning speed. You’ll learn how to take a task that usually takes a long time and make it happen in a literal instant.
Bit manipulationis a fundamental concept in computer science that involves direct operations on individual bits of a number. It is widely used in low-level programming, embedded systems, competitive programming, and optimization techniques.
What is Bit Manipulation?
Bit manipulation refers to operations that modify bits directly using bitwise operators. These operations enable efficient computation, reducing memory usage and increasing processing speed.
Why Use Bit Manipulation?
Faster computations than arithmetic operations.
Space optimization (useful in embedded systems).
Direct hardware interaction.
Useful in cryptography, compression, and networking.
Bitwise Operators in C and C++:
Operator
Symbol
Description
Example (a = 5 (0101), b = 3 (0011))
Output
AND
&
Sets bits to 1 if both are 1, otherwise 0
a & b → 0101 & 0011
0001 (1)
OR
`
`
Sets bits to 1 if at least one is 1
`a
XOR
^
Sets bits to 1 if they are different
a ^ b → 0101 ^ 0011
0110 (6)
NOT
~
Inverts all bits (1 → 0, 0 → 1)
~a → ~0101
1111...1010 (-6 in 2’s complement)
Left Shift
<<
Shifts bits left by n places (multiplies by 2^n)
a << 1 → 0101 << 1
1010 (10)
Right Shift
>>
Shifts bits right by n places (divides by 2^n)
a >> 1 → 0101 >> 1
0010 (2)
Applications of Bit Manipulation
Efficient Data Storage: Compact storage of flags using bit fields.
Cryptography: XOR encryption algorithms.
Networking: IP masking, subnetting.
Image Processing: Pixel bit operations.
Game Development: Bitwise operations for collision detection.
💛 Support Embedded Prep
If you find our tutorials helpful and want to support our mission of sharing high-quality embedded system knowledge, you can contribute by buying us a coffee.
Every small contribution helps us keep creating valuable content for learners like you. ☕
Thank you for your support — it truly keeps Embedded Prep growing. 💻✨
Basic Bit Manipulation Interview Questions
1. What are Bitwise Operators in C/C++?
Answer: Bitwise operators perform operations at the bit level. The main bitwise operators in C/C++ are:
& (AND)
| (OR)
^ (XOR)
~ (NOT)
<< (Left Shift)
>> (Right Shift)
Example:
int a = 5, b = 3;
cout << (a & b); // Output: 1 (0101 & 0011 = 0001)
cout << (a | b); // Output: 7 (0101 | 0011 = 0111)
2. How do you check if a number is even or odd using bit manipulation?
Answer: Use the AND operator with 1. If the least significant bit (LSB) is 1, the number is odd; otherwise, it\’s even.
13. How do you find the two non-repeating elements in an array where every other element appears twice?
Answer: Use XOR to find x ^ y, then use the rightmost set bit to separate numbers into two groups.
void findTwoUnique(int arr[], int n) {
int xorAll = 0;
for (int i = 0; i < n; i++) xorAll ^= arr[i];
int setBit = xorAll & -xorAll;
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
if (arr[i] & setBit) x ^= arr[i];
else y ^= arr[i];
}
cout << x << \" \" << y;
}
14. How do you multiply a number by 2 using bitwise operations?
Answer: Left shift << 1:
int multiplyByTwo(int n) {
return n << 1;
}
15. How do you divide a number by 2 using bitwise operations?
Answer: Right shift >> 1:
int divideByTwo(int n) {
return n >> 1;
}
Bit Manipulation Interview Questions
1. How do you set the 3rd bit of a number to 1?
Answer: Use the OR (|) operator with (1 << k).
int num = 5; // 0101
num = num | (1 << 3); // Set 3rd bit
cout << num; // Output: 13 (1101)
2. How do you clear the 2nd bit of a number?
Answer: Use AND (&) with the negation of (1 << k).
int num = 7; // 0111
num = num & ~(1 << 2); // Clear 2nd bit
cout << num; // Output: 3 (0011)
3. How do you toggle the 1st and 3rd bits of a number?
Answer: Use XOR (^) with (1 << k).
int num = 5; // 0101
num = num ^ (1 << 1); // Toggle 1st bit
num = num ^ (1 << 3); // Toggle 3rd bit
cout << num; // Output: 13 (1101)
4. How do you check if the 4th bit of a number is set or not?
Answer: Use AND (&) with (1 << k).
int num = 9; // 1001
bool isSet = (num & (1 << 3)) != 0; // Check if 4th bit is 1
cout << isSet; // Output: 1 (true)
5. How do you turn off the rightmost set bit of a number?
Answer: Use n & (n - 1).
int num = 6; // 0110
num = num & (num - 1); // Removes rightmost 1
cout << num; // Output: 4 (0100)
6. How do you check if a number has an odd or even number of 1’s?
int num = 9; // 1001
num = num ^ ((1 << 3) - 1);
cout << num; // Output: 6 (0110)
14. How do you find the number of bits needed to flip to convert a to b?
Answer: Use countSetBits(a ^ b).
int countSetBits(int n) {
int count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
int bitFlips(int a, int b) {
return countSetBits(a ^ b);
}
Example:
cout << bitFlips(10, 20); // Output: 4
15. How do you reverse only the lowest k bits of a number?
Answer: Use n ^ ((1 << k) - 1).
int reverseLowestKBits(int n, int k) {
return n ^ ((1 << k) - 1);
}
Bit Manipulation Tricks
1. Check if a number is even or odd
✅ Trick:n & 1 → If the last bit is 1, the number is odd; if 0, it’s even.
10. Find the only non-repeating element in an array where every other element appears twice
✅ Trick:XOR all elements → Only unique element remains
int findUnique(vector<int>& nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}
🔹 Example:findUnique({1, 2, 3, 2, 1}) → 3
How can you check whether two numbers have opposite signs using bitwise operators?
When you want to check whether two integers have opposite signs (one positive and one negative), you can do it using bitwise operators—specifically the XOR ( ^ ) operator.
Bitwise operations work directly on the binary representation of numbers, which makes them extremely fast and ideal for system-level programming, embedded systems, and interview questions.
Why XOR Works for Opposite Sign Detection
In binary, positive and negative integers are stored using Two’s Complement representation.
A positive number has the most significant bit (MSB) = 0
A negative number has the MSB = 1
Example:
+10 → MSB = 0
-10 → MSB = 1
If we XOR two numbers:
If their MSBs differ → result MSB becomes 1
If their MSBs are same → result MSB becomes 0
So, opposite signs = XOR result is negative.
The Bitwise Trick
Two numbers a and b have opposite signs if:
(a ^ b) < 0
Explanation
a ^ b performs bitwise XOR.
If a and b have opposite signs → MSB differs → XOR result MSB = 1 → value < 0
If they have same sign → XOR result MSB = 0 → value ≥ 0
Simple and efficient!
Step-by-Step Example
Suppose:
a = 8 // binary: 00001000
b = -5 // binary: 11111011 (two’s complement)
XOR them:
a ^ b = 11110011 (MSB = 1 → means negative)
Because the final MSB is 1, this means a and b have opposite signs.
Full C Code Example
#include <stdio.h>
int main() {
int a = 8;
int b = -5;
if ((a ^ b) < 0) {
printf("a and b have opposite signs\n");
} else {
printf("a and b have the same sign\n");
}
return 0;
}
Output:
a and b have opposite signs
Advantages of This Bitwise Method
Extremely fast (no branching, no multiplication)
Works for all integers (positive, negative, zero)
Popular in embedded systems and competitive programming
Asked commonly in C/C++ interviews
Important Notes
Zero is considered non-negative, so:
Opposite sign check with 0 will always return false
Example: a = 0, b = -10 → treated as same sign
Summary
If someone asks “How can you check whether two numbers have opposite signs using bitwise operators?”, the best method is to use the XOR operator ( ^ ). Two integers have opposite signs when:
(a ^ b) < 0
This works because XOR highlights the difference between the sign bits. If the result is negative, the sign bits differed—meaning one number is positive and the other is negative.
Real-Time Scenario-Based Interview Questions
After Reading above tutorials if you want to deep dive into concept then you can take a time and think about below bit Manipulation Real-Time Scenario-Based Interview Questions
1. Basic Bitwise Operations
How do you check if a given number is even or odd using bitwise operations?
Can you swap two numbers without using a temporary variable?
How do you check if the k-th bit is set (1) or not (0) in a number?
Write a function to set, clear, toggle, and test a bit in a given integer.
2. Bitwise Tricks for Optimization
How do you find the only non-repeating element in an array where every other element appears twice?
How can you efficiently multiply or divide a number by powers of 2 using bitwise operations?
Write a function to toggle the lowest k bits of a given number.
How do you detect if two numbers have opposite signs using bitwise operations?
3. Power of Two & Bit Counting
How can you check if a number is a power of two using bit manipulation?
Implement a function to count the number of 1s (set bits) in a binary representation of a number.
Write an efficient algorithm to find the position of the rightmost set bit in a number.
How do you turn off the rightmost set bit in a given integer?
4. Advanced Bitwise Problems
How do you efficiently compute XOR from 1 to N?
How do you find the only two non-repeating numbers in an array where every other number appears twice?
How do you reverse the bits of a given 32-bit integer?
Write a function to find the missing number in an array containing numbers from 0 to N, given that only one number is missing.
5. Real-Time Embedded System Scenarios
In an embedded system, how would you use bitwise operations to control hardware registers?
How can you use bit manipulation to store multiple flags efficiently in a single variable?
If a sensor provides 8-bit data, but your system processes 16-bit values, how would you efficiently extract and manipulate the required bits?
How do you implement a bitmask-based permission system using bitwise operations?
6. Bitwise Manipulation in Image Processing & Networking
How can you extract the red, green, and blue (RGB) components from a 24-bit color code?
How would you use bitwise operations for efficient checksum calculations in network packets?
In a microcontroller project, how do you implement a circular buffer using bitwise operations?
Basic Bit Manipulation MCQs
1. What is the result of 5 & 3 in binary operations?
A) 7
B) 3
C) 1
D) 5 ✅ Answer: C) 1 Explanation:5 (101) & 3 (011) = 001 (1 in decimal)
2. What does the expression (x | (1 << n)) do?
A) Clears the nth bit of x
B) Sets the nth bit of x
C) Toggles the nth bit of x
D) Checks if the nth bit is set ✅ Answer: B) Sets the nth bit of x Explanation: The left shift moves 1 to the nth position and OR (|) ensures the bit is set.
3. What will 10 >> 1 (right shift) evaluate to?
A) 5
B) 20
C) 2
D) 8 ✅ Answer: A) 5 Explanation:10 (1010) >> 1 shifts bits right by 1, resulting in 0101 (5 in decimal).
4. How do you check if the nth bit of x is set?
A) x & (1 << n)
B) x | (1 << n)
C) x ^ (1 << n)
D) x ~ (1 << n) ✅ Answer: A) x & (1 << n) Explanation: ANDing with (1 << n) checks if the nth bit is set (1).
5. What does x ^ (1 << n) do?
A) Clears the nth bit
B) Sets the nth bit
C) Toggles the nth bit
D) Checks if the nth bit is set ✅ Answer: C) Toggles the nth bit Explanation: XOR flips the bit—1 becomes 0, and 0 becomes 1.
Intermediate Bit Manipulation MCQs
6. Which bitwise operator is used to clear a particular bit?
A) AND (&)
B) OR (|)
C) XOR (^)
D) NOT (~) ✅ Answer: A) AND (&) Explanation:x & ~(1 << n) clears the nth bit.
8. What is the number of set bits in 29 (binary 11101)?
A) 2
B) 3
C) 4
D) 5 ✅ Answer: D) 5 Explanation:29 (11101) has five set bits.
9. How do you efficiently count set bits in an integer?
A) Using a loop and checking bits one by one
B) Using n & (n-1) repeatedly
C) Using x | (1 << n)
D) None of the above ✅ Answer: B) Using n & (n-1) repeatedly Explanation:n & (n-1) removes the rightmost set bit in O(number_of_1s) time.
10. What does x & (-x) return?
A) The most significant set bit
B) The least significant set bit
C) Clears all bits
D) None of the above ✅ Answer: B) The least significant set bit Explanation:-x is 2\'s complement of x, and x & (-x) isolates the rightmost 1.
11. How do you check if a number is a power of 2?
A) x & (x - 1) == 0
B) x | (x - 1) == 0
C) x ^ (x - 1) == 0
D) None of the above ✅ Answer: A) x & (x - 1) == 0 Explanation: Powers of 2 have only one set bit, so x & (x-1) == 0 works.
12. What is the result of ~5 in a 32-bit system?
A) -6
B) 5
C) -5
D) 6 ✅ Answer: A) -6 Explanation:~5 inverts all bits, leading to -(5+1) = -6 (Two’s complement representation).
13. What does x << 3 do?
A) Multiply x by 2
B) Multiply x by 8
C) Divide x by 2
D) Divide x by 8 ✅ Answer: B) Multiply x by 8 Explanation: Left shift by n is equivalent to multiplying by 2^n.
14. Which operator is used for swapping two numbers using bitwise operations?
A) |
B) ^
C) &
D) << ✅ Answer: B) ^ (XOR) Explanation: Swapping using XOR: x = x ^ y; y = x ^ y; x = x ^ y;
15. How do you reverse bits in an integer most efficiently?
A) Using a loop and bitwise operations
B) Using lookup tables
C) Using recursion
D) None of the above ✅ Answer: B) Using lookup tables Explanation: Lookup tables provide an O(1) method for reversing bits.
Bit Manipulation Quiz: Do You Know These Tricky Interview Questions?
Test your knowledge with this fresh and SEO-optimized set of MCQs and True/False questions based on Bit Manipulation. These questions help boost learning, engagement, and ranking power.
1. Do you know? Which bitwise operator is commonly used to toggle a specific bit?
A. &
B. |
C. ^
D. ~
Answer: C
2. Do you know? What is the output of (12 & 5)?
A. 4
B. 5
C. 0
D. 8
Answer: A
3. True or False: The expression (n & (n – 1)) clears the lowest set bit of n.
Answer: True
4. Do you know? Which expression checks if the k-th bit is set?
A. n ^ (1 << k)
B. n | (1 << k)
C. n & (1 << k)
D. ~(1 << k)
Answer: C
5. True or False: XOR of a number with itself always returns 1.
Answer: False (It returns 0)
6. Do you know? What is the binary representation of decimal 9?
A. 1011
B. 0101
C. 1001
D. 1110
Answer: C
7. True or False: Left shift by 1 multiplies the number by 2.
Answer: True
8. Do you know? Which operator is used to force a specific bit to 0?
A. n | (1 << k)
B. n ^ (1 << k)
C. n & ~(1 << k)
D. n + (1 << k)
Answer: C
9. True or False: (n >> 1) always divides n by 2 for both positive and negative numbers.
Answer: False (negative numbers behave differently in arithmetic shift)
10. Do you know? What does (x & -x) return for any integer x?
A. Highest set bit
B. Middle bit
C. Lowest set bit
D. All unset bits
Answer: C
11. True or False: Bitwise NOT (~) inverts each bit and adds 1 internally.
Answer: False (It simply flips each bit)
12. Do you know? What does XOR do when used to swap two variables?
A. Reverses bits
B. Exchanges values without temp variable
C. Clears bits
D. Shifts bits
Answer: B
13. True or False: (n & 1) checks if n is even or odd.
Answer: True
14. Do you know? Which bitwise operator has the highest precedence?
A. |
B. ^
C. &
D. ~
Answer: D
15. True or False: Using bit manipulation is faster than using arithmetic operations in many low-level systems.
Answer: True
Frequently Asked Questions (FAQ) on Bit Manipulation:
1. What is bit manipulation?
Bit manipulation is the process of directly operating on individual bits of binary numbers using bitwise operators like AND (&), OR (|), XOR (^), NOT (~), Left Shift (<<), and Right Shift (>>).
2. Why is bit manipulation important in programming?
Bit manipulation optimizes performance by reducing execution time and memory usage. It is widely used in embedded systems, cryptography, networking, compression algorithms, and competitive programming.
3. What are the common bitwise operators in C/C++?
The common bitwise operators are: AND (&) – Sets bits to 1 only if both bits are 1. OR (|) – Sets bits to 1 if at least one bit is 1. XOR (^) – Sets bits to 1 if the bits differ. NOT (~) – Inverts all bits (1 → 0, 0 → 1). Left Shift (<<) – Shifts bits left (multiplies by 2^n). Right Shift (>>) – Shifts bits right (divides by 2^n).
4. How can you check if a number is even or odd using bit manipulation?
Use n & 1: If n & 1 == 0, the number is even. If n & 1 == 1, the number is odd. bool isOdd(int n) { return (n & 1); }
5. How do you swap two numbers without using a temporary variable?
Using XOR (^): void swap(int &a, int &b) { a ^= b; b ^= a; a ^= b; }
6. How do you check if a number is a power of 2?
A number is a power of 2 if it has exactly one 1 bit in binary : bool isPowerOfTwo(int n) { return (n > 0) && ((n & (n – 1)) == 0); }
7. How can you count the number of 1s (set bits) in a number?
Use Brian Kernighan’s Algorithm: int countSetBits(int n) { int count = 0; while (n) { n &= (n - 1); // Removes the rightmost set bit count++; } return count; }
8. How do you find the rightmost set bit of a number?
Use n & -n: int getRightmostSetBit(int n) { return n & -n; } 🔹 Example: getRightmostSetBit(18) → 2 (10010)
9. How do you toggle (flip) a specific bit in a number?
Use XOR with a mask: int toggleBit(int n, int k) { return n ^ (1 << k); } 🔹 Example: toggleBit(5, 1) → 7 (0101 → 0111)
10. How do you find the unique number in an array where every other element appears twice?
Use XOR on all elements: int findUnique(vector<int>& nums) { int result = 0; for (int num : nums) { result ^= num; } return result; } 🔹 Example: findUnique({1, 2, 3, 2, 1}) → 3
You can also Visit other tutorials of Embedded Prep
Master structures and unions in C with powerful tips for 2026. Learn memory layout, use cases, best practices, and common mistakes in C programming.
It’s a quiet evening, and I’m sitting at my desk with a cup of coffee. The soft hum of my laptop fills the room as I revisit my old C projects. I remember the first time I encountered structures and unions in C — the concepts seemed powerful but complex. Over time, I realized that mastering them wasn’t just about writing code; it was about understanding how they shape memory, improve efficiency, and make programs robust. In 2025, with embedded systems growing more advanced, having a solid grasp on these concepts is more important than ever. This guide will share 5 powerful tips to help you master structures and unions in C for success in your projects and interviews.
Structure in c
Structure and Union in c : A structure in C is a user-defined data type that groups related variables of different data types under a single name. Each member of a structure has its own memory location.
Syntax of Structure in c
struct Student {
int id;
char name[50];
float marks;
};
A unionis a user-defined data type similar to a structure, but in a union, all members share the same memory location. The size of the union is equal to the size of the largest member.
Syntax of Union in c
union Data {
int id;
char name[50];
float marks;
};
Only one member can hold a value at a time.
Accessed using the dot (.) operator.
Example of union in c
#include <stdio.h>
union Data {
int id;
char name[50];
float marks;
};
int main() {
union Data d1;
d1.id = 101;
printf(\"ID: %d\\n\", d1.id);
d1.marks = 85.5; // Overwrites \'id\' value
printf(\"Marks: %.2f\\n\", d1.marks);
return 0;
}
Difference Between Structure and Union
Feature
Structure
Union
Memory
Each member has its own memory.
All members share the same memory.
Size
Sum of all members\’ sizes.
Size of the largest member.
Storage
Stores multiple values at a time.
Stores only one value at a time.
Access
All members can be accessed independently.
Only the last assigned member holds a valid value.
Use Case
Used when all members need to hold values.
Used when only one value is needed at a time to save memory.
Pointer in Structure in C
A pointer to a structure is a pointer that holds the address of a structure variable. This allows efficient manipulation of structure data.
Declaring a Pointer to a Structure
struct Student {
int id;
char name[50];
float marks;
};
struct Student *ptr; // Pointer to a structure
💛 Support Embedded Prep
If you find our tutorials helpful and want to support our mission of sharing high-quality embedded system knowledge, you can contribute by buying us a coffee.
Every small contribution helps us keep creating valuable content for learners like you. ☕
Thank you for your support — it truly keeps Embedded Prep growing. 💻✨
Accessing Structure Members Using Pointer
Since a structure pointer holds the address of a structure, we use the -> (arrow operator) to access its members.
A pointer to a union is similar to a pointer to a structure, but since a union shares memory among its members, only one member can hold a valid value at a time.
Declaring a Pointer to a Union
union Data {
int id;
float marks;
char name[50];
};
union Data *ptr; // Pointer to a union
Accessing Union Members Using Pointer
Since a union pointer holds the address of a union variable, we use the -> (arrow operator) to access its members.
Example
#include <stdio.h>
union Data {
int id;
float marks;
char name[50];
};
int main() {
union Data d1; // Union variable
union Data *ptr = &d1; // Pointer to union
ptr->id = 101;
printf(\"ID: %d\\n\", ptr->id);
ptr->marks = 85.5; // Overwrites id
printf(\"Marks: %.2f\\n\", ptr->marks);
return 0;
}
Output:
ID: 101
Marks: 85.50
Notice that the id value is lost when we assign marks, as they share the same memory.
Dynamic Memory Allocation for Union Pointer
We can allocate memory dynamically to a union pointer using malloc().
Example
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
union Data {
int id;
float marks;
char name[50];
};
int main() {
union Data *ptr;
ptr = (union Data *)malloc(sizeof(union Data)); // Memory allocation
if (ptr == NULL) {
printf(\"Memory allocation failed\\n\");
return 1;
}
ptr->id = 102;
printf(\"ID: %d\\n\", ptr->id);
ptr->marks = 90.2; // Overwrites id
printf(\"Marks: %.2f\\n\", ptr->marks);
strcpy(ptr->name, \"Bob\"); // Overwrites marks
printf(\"Name: %s\\n\", ptr->name);
free(ptr); // Free allocated memory
return 0;
}
Array of Union Pointers
We can create an array of pointers to unions to manage multiple data records.
Example
#include <stdio.h>
union Data {
int id;
float marks;
};
int main() {
union Data d1, d2;
union Data *arr[] = {&d1, &d2}; // Array of union pointers
arr[0]->id = 101;
printf(\"ID: %d\\n\", arr[0]->id);
arr[1]->marks = 92.5;
printf(\"Marks: %.2f\\n\", arr[1]->marks);
return 0;
}
Union Pointer Inside a Structure
A structure can have a pointer to a union.
Example
#include <stdio.h>
union Data {
int id;
float marks;
};
struct Student {
int roll_no;
union Data *info; // Pointer to a union
};
int main() {
union Data d1;
d1.id = 101;
struct Student s1;
s1.roll_no = 1;
s1.info = &d1; // Assign union pointer to structure
printf(\"Roll No: %d\\n\", s1.roll_no);
printf(\"ID: %d\\n\", s1.info->id);
return 0;
}
How does the system behave when one structure variable is assigned to another?
When you assign one structure variable to another, the system performs a member-by-member (field-by-field) copy. This means every value inside the structure is copied from the source to the destination, as long as both structures belong to the same structure type.
In simple terms: All data inside the structure gets duplicated exactly, just like copying one folder into another.
Key Points
1. Deep Copy vs Shallow Copy (Important for interviews & SEO)
The assignment creates a shallow copy, not a deep copy.
But for normal data types (int, float, char arrays), shallow copy works exactly like deep copy because values get fully copied.
If the structure contains pointers, only the pointer address is copied—not the data it points to.
An anonymous structure is a structure without a name, usually defined within another structure or union.
Example:
struct {
int id;
char name[50];
} student;
7. What is a Flexible Array Member in a Structure?
A flexible array member is an array with an unspecified size at the end of a structure.
Example:
struct Data {
int length;
char buffer[]; // Flexible array member
};
8. What is a Packed Structure in C?
A packed structure reduces padding and optimizes memory usage by forcing strict alignment.
Example:
#pragma pack(1)
struct PackedData {
char a;
int b;
};
9. What is a Structure with Function Pointers?
A structure can contain function pointers to store and invoke functions dynamically.
Example:
struct Operation {
int (*add)(int, int);
};
10. How are Structures Used in Linked Lists and Trees?
Structures help in data representation for linked lists and trees using self-referential pointers.
Example (Linked List Node):
struct Node {
int data;
struct Node* next;
};
Frequently Asked Questions (FAQ) on Unions in C
1. What is a union in C?
A union is a user-defined data type where all members share the same memory location, making it memory-efficient.
Example:
union Data {
int id;
float marks;
};
2. What is typedef union and why is it used?
typedef union creates a union alias for easier use.
Example:
typedef union {
int id;
float marks;
} Data;
3. What is an Anonymous Union in C?
An anonymous union is a union without a name, directly embedded within a structure.
Example:
struct {
union {
int id;
float marks;
};
} student;
4. What is a Self-Referential Union in C?
A self-referential union contains a pointer to itself, similar to a self-referential structure.
Example:
union Node {
int data;
union Node *next;
};
5. What is a Bit Field Union in C?
A bit field union allows memory-efficient representation using bit fields.
Example:
union Status {
struct {
unsigned int ready : 1;
unsigned int error : 1;
unsigned int processing : 2;
};
int full_status;
};
6. How is a Union Used Inside a Structure?
A union can be embedded in a structure to allow flexible data representation.
Example:
struct Employee {
int empID;
union {
int salary;
float hourly_rate;
} pay;
};
7. What Happens When a Union Contains Different Data Types?
Only one member can hold valid data at a time, so assigning one member will overwrite others.
Example:
union Data {
int id;
float marks;
};
union Data d;
d.id = 100;
printf(\"%d\", d.id);
d.marks = 85.5;
printf(\"%f\", d.marks); // Overwrites previous data
8. How are Unions Used in Device Drivers?
Unions help in accessing hardware registers and memory-mapped I/O efficiently.
Example:
union Register {
struct {
unsigned int enable : 1;
unsigned int mode : 2;
unsigned int reserved : 5;
};
unsigned char reg_value;
};
9. How Does a Union Optimize Memory Usage?
Since all union members share the same memory, it reduces memory consumption compared to structures.
10. What is Type Punning Using Unions?
Type punning allows interpreting a memory region as different data types.
Example:
union Convert {
int i;
float f;
};
union Convert c;
c.i = 1065353216; // Binary representation of 1.0 in IEEE 754
printf(\"%f\", c.f); // Prints 1.0
Conclusion: Understanding Structures and Unions in C
Structures and unions are fundamental building blocks in C programming, enabling efficient data organization and memory management.
Structures (struct) allow grouping multiple variables of different data types, making them ideal for defining complex data models like linked lists, trees, and configuration settings. They offer data encapsulation, structured representation, and ease of access.
Unions (union) provide a memory-efficient alternative where multiple variables share the same memory location. They are particularly useful in scenarios where only one variable is needed at a time, such as device drivers, low-level memory handling, and hardware register manipulation.
Key Takeaways
Use structures when you need to store and access multiple fields independently. Use unions when memory optimization is critical, and only one field needs to be accessed at a time. Both structures and unions support pointers, typedef, nesting, bit fields, and function pointers, making them versatile tools for embedded systems, networking, and system programming. Understanding how to leverage these data types efficiently can lead to optimized memory usage, better performance, and scalable software design.
Mastering structures and unions will significantly enhance your C programming skills, especially if you work in embedded systems, low-level programming, or high-performance applications. Keep exploring, experimenting, and optimizing!
Structures and unions in C are user-defined data types that allow grouping of variables. Structures group variables of different data types under a single name, with each member having its own memory location. Unions, on the other hand, allow storing different data types in the same memory location, with the size of the union being equal to its largest member.
Frequently Asked Questions (FAQ) on Structures and Unions in C
1. What is a structure in C? A structure in C is a user-defined data type that groups related variables of different data types under a single name. Each member of a structure has its own memory location.
2. How do you define a structure in C? A structure is defined using the struct keyword, followed by the structure name and a block containing the member declarations. For example:
struct Student {
int id;
char name[50];
float marks;
};
3. How do you access members of a structure? Members of a structure are accessed using the dot (.) operator with the structure variable. For example:
struct Student s1;
s1.id = 101;
4. What is a union in C? A union in C is a user-defined data type similar to a structure, but in a union, all members share the same memory location. This means only one member can hold a value at any given time.
5. How do you define a union in C? A union is defined using the union keyword, followed by the union name and a block containing the member declarations. For example:
union Data {
int id;
char name[50];
float marks;
};
6. How do you access members of a union? Members of a union are accessed using the dot (.) operator with the union variable. For example:
union Data d1;
d1.id = 101;
7. What is the main difference between structures and unions? The main difference is in memory allocation. In structures, each member has its own memory location, allowing multiple members to hold values simultaneously. In unions, all members share the same memory location, so only one member can hold a value at a time.
8. How do you declare a pointer to a structure? A pointer to a structure is declared by specifying the structure type followed by an asterisk (*) and the pointer name. For example:
struct Student *ptr;
9. How do you access structure members using a pointer? When using a pointer to a structure, members are accessed using the arrow (->) operator. For example:
10. How do you dynamically allocate memory for a structure pointer? Dynamic memory allocation for a structure pointer is done using the malloc function. For example:
11. Can structures contain pointers to themselves? Yes, structures can contain pointers to themselves, enabling the creation of complex data structures like linked lists. For example:
struct Node {
int data;
struct Node *next;
};
12. Can unions be nested within structures? Yes, unions can be nested within structures to create flexible data structures. For example:
struct Container {
int type;
union {
int intValue;
float floatValue;
char *stringValue;
} data;
};
13. What are bit fields in structures? Bit fields allow the allocation of a specific number of bits to structure members, enabling memory-efficient storage of data requiring limited bit-width. For example:
struct {
unsigned int flag : 1;
unsigned int value : 4;
} bitField;
14. How do you initialize structures and unions? Structures and unions can be initialized at the time of declaration. For structures:
struct Student s1 = {101, \"Alice\", 85.5};
For unions:
union Data d1 = {101};
15. What are anonymous unions? Anonymous unions are unions without a name, allowing their members to be accessed directly without a union variable. They are typically used within structures. For example:
struct Example {
int type;
union {
int intValue;
float floatValue;
};
};
16. What are the use cases for structures and unions? Structures are used when multiple related variables of different types need to be grouped together, each holding its own value. Unions are used when a variable may hold different types of data at different times, conserving memory by sharing the same memory location.
Thank you for exploring this tutorial! Stay ahead in embedded systems with expert insights, hands-on projects, and in-depth guides. Follow Embedded Prep for the latest trends, best practices, and step-by-step tutorials to enhance your expertise. Keep learning, keep innovating!