Tag: Data structures in C

  • Structures and Unions Interview Questions Powerful & Essential Questions for Success (2026)

    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:

    FeatureStructureUnion
    MemorySeparate memory for each memberShared memory for all
    SizeSum of all members (with padding)Size of largest member
    UsageStore multiple values at onceStore one value at a time
    Example UseEmployee recordsEmbedded 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:

    1. By value
    2. By pointer
    3. 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.

    Example:

    union Register {
        uint32_t value;
        struct {
            uint32_t flag1:1;
            uint32_t flag2:1;
            uint32_t mode:2;
        } bits;
    };
    

    Can a union have bitfields?

    Yes.
    Very important in systems programming.

    Can a structure contain a union and vice-versa?

    Yes, example:

    struct Packet {
        int type;
        union {
            int id;
            float value;
        } data;
    };
    

    What is union-intersection test example?

    Example:

    Say you have two sets:

    A = {1,2,3}
    B = {2,3,4}

    Intersection = {2,3}

    A union B = {1,2,3,4}

    Used in questions around union-intersection test example.

    Explain real-life use of union in protocol parsing

    Protocols often require interpreting the same data as:

    • bytes
    • words
    • floats
    • struct of bits

    Unions let us do that efficiently.

    Can we initialize multiple union members?

    No.
    Only the last initialized member holds valid data.

    How does endianness affect structures and unions?

    Very common question.

    Union endianness example:

    union test {
        int x;
        char ch[4];
    };
    

    Real-World Embedded Use Cases

    Interviewers are impressed when you explain real embedded usage.

    Use Case 1: Sensor Packet Parsing

    Unions help reinterpret raw bytes as structured data.

    Use Case 2: Memory Optimization

    In microcontrollers with limited RAM, unions reduce RAM footprint.

    Use Case 3: Register Access

    Mapping hardware registers using bitfields inside unions is extremely common.

    Use Case 3: Variant Message Types

    Example:

    struct Message {
        int type;
        union {
            int temp;
            float pressure;
            char status;
        } data;
    };
    

    More Deep Interview Questions on Structure and Union in C

    Below is a rich list of questions helpful for Qualcomm, Samsung, and system interviews.

    Why cannot we take size of incomplete structure?

    Because compiler doesn’t yet know memory layout.

    What is self-referencing structure?

    A structure that contains pointer to itself:

    struct node {
        int data;
        struct node *next;
    };
    

    Difference between typedef struct and struct?

    typedef gives alias.
    No functional difference.

    Are structures stored in stack or heap?

    Depends:

    • Local → stack
    • Dynamically allocated → heap

    Can we copy a structure using memcpy?

    Yes—but be careful with pointers.

    Is accessing union data type-safe?

    No, union is inherently unsafe if misused.

    What are structure padding and alignment?

    Padding = unused bytes inserted for alignment.
    Alignment = data placed at addresses divisible by data size.

    50+ Structures and Unions Interview Questions

    Beginner-Level Questions (Basics)

    1. What is a structure in C?
    2. What is a union in C?
    3. What is the difference between structure and union?
    4. How is memory allocated in a structure?
    5. How is memory allocated in a union?
    6. Can we declare arrays inside a structure?
    7. Can we declare arrays inside a union?
    8. Can a structure hold multiple data types?
    9. Can a union hold multiple data types?
    10. What is the size of an empty structure?
    11. What is the size of an empty union?
    12. Can a structure contain another structure?
    13. Can a union contain another union?
    14. Can a structure contain a union?
    15. Can a union contain a structure?

    Intermediate-Level Questions (Memory, Padding, Function Calls)

    1. What is structure padding?
    2. What is structure alignment?
    3. What is structure packing?
    4. How to disable structure padding?
    5. Why does padding exist in structures?
    6. Why do unions not have padding between members?
    7. Can we compare two structures using == operator?
    8. Can we compare two union variables using == operator?
    9. How do you pass a structure to a function?
    10. How do you return a structure from a function?
    11. Can a structure be initialized at the time of declaration?
    12. Can a union be initialized at the time of declaration?
    13. What happens if we read a union member that was not last written?s
    14. What is a pointer to a structure?
    15. What is the arrow operator (->) used for?
    16. What is a typedef structure?
    17. What is a flexible array member in a structure?
    18. What are bitfields in structures?
    19. Can unions contain bitfields?

    Advanced-Level Questions (Embedded, Type Punning, Internals)

    1. How do you calculate the size of a structure manually?
    2. How do you calculate the size of a union manually?
    3. What is the maximum alignment requirement in a structure?
    4. What is the advantage of using unions in embedded systems?
    5. What is type punning using union?
    6. What is the effect of endianness in unions?
    7. What are tagged unions?
    8. What is a self-referential structure?
    9. How do you allocate memory dynamically for structures?
    10. Can we use memcpy() with structures?
    11. Why is it risky to use unions for type-casting?
    12. What is the layout of structure members in memory?
    13. What is the layout of union members in memory?
    14. Can a structure be packed differently on different compilers?
    15. Are unions guaranteed to store overlapping memory?
    16. What happens when structure members have mixed datatypes (char, int, float)?
    17. How do you map hardware registers using structures?
    18. How do you map hardware registers using unions?
    19. Why do protocols use unions for parsing data?
    20. What is offsetof() macro and how is it used with structures?
    21. How is bit-endianness handled inside a union bitfield?
    22. Can structures be used to implement linked lists, stacks, and trees?
    23. Why is structure assignment more expensive than union assignment?
    24. Can unions be used to interpret raw data packets?
    25. What is the difference between unions vs structures in handling memory failures?

    FAQ of Structures and Unions Interview Questions

    Q1: What are the most common Structures and Unions Interview Questions?

    Questions on memory layout, padding, size, nested usage, unions vs structures, and bitfields are the most common.

    Q2: Why do interviewers ask questions about structures and unions in C?

    Because these reveal your understanding of memory, alignment, and low-level behavior.

    Q3: What’s the main difference between structures vs unions in C?

    Structure stores all members; union stores only one member at a time.

    Q4: How do unions save memory?

    Because all members share the same location.

    Q5: Are unions used in embedded systems?

    Yes, especially for register access and protocol parsing.

    Q6: Do structures have padding?

    Yes, for alignment.

    Q7: Can we remove padding?

    Yes, using packed attributes.

    Q8: What are common c interview questions on structures and unions?

    Size calculation, memory layout, bitfields, casting, union type punning.

    Q9: Is union safe to use?

    Only if used correctly.

    Q10: What are structured interview questions and answers?

    These are standardized questions asked in HR interviews.

    Q11: What are union structures in organizational context?

    Local, regional, national labor union structures.

    Conclusion

    If you read this entire guide, you now understand:

    • Structures and unions in C
    • Differences between structures vs unions
    • Memory layout, padding, alignment
    • Beginner to advanced structure and union interview questions in C
    • Real-world embedded usage
    • A long list of practice questions
  • Master Doubly Linked List in Data Structures (With Examples) 2026

    Introduction to Doubly Linked List

    When you’re learning data structures, you’ll often hear about Linked Lists. A Doubly Linked List (DLL) is a powerful and flexible variation of the basic Singly Linked List that allows you to traverse in both directions — forward and backward.

    In this beginner-friendly article, we’ll explore:

    • What is a Doubly Linked List?
    • How it works (with diagrams)
    • Real-world uses
    • Advantages over singly linked list
    • Basic operations (insertion, deletion, traversal)
    • Code example in C/C++

    🚀 Whether you’re preparing for coding interviews or improving your DSA skills, understanding doubly linked lists is a must!

    What is a Doubly Linked List?

    A Doubly Linked List is a type of linear data structure made up of nodes, where each node contains:

    • Data (the actual value)
    • Pointer to the next node
    • Pointer to the previous node

    ⚙️ Node Structure of Doubly Linked List:

    +-------+----------+----------+
    | prev  |   data   |   next   |
    +-------+----------+----------+
    

    Each node is connected to its previous and next node, unlike a singly linked list, which only has a next pointer.

    Visual Representation of Doubly Linked List

    Let’s say we have 3 nodes with data: 10, 20, and 30.

    NULL <- [10] <-> [20] <-> [30] -> NULL
    

    Here:

    • Node 10’s prev is NULL
    • Node 20’s prev points to 10 and next to 30
    • Node 30’s next is NULL

    Basic Operations on Doubly Linked List

    1. Insertion

    • At the beginning
    • At the end
    • At a specific position

    2. Deletion

    • From the beginning
    • From the end
    • Specific node

    3. Traversal

    • Forward traversal (left to right)
    • Backward traversal (right to left)

    C Code Example: Basic DLL Operations

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        int data;
        struct Node* prev;
        struct Node* next;
    } Node;
    
    Node* head = NULL;
    
    // Insert at end
    void insertEnd(int value) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = value;
        newNode->next = NULL;
    
        if (head == NULL) {
            newNode->prev = NULL;
            head = newNode;
            return;
        }
    
        Node* temp = head;
        while (temp->next != NULL)
            temp = temp->next;
    
        temp->next = newNode;
        newNode->prev = temp;
    }
    
    // Display forward
    void displayForward() {
        Node* temp = head;
        printf("DLL (forward): ");
        while (temp != NULL) {
            printf("%d <-> ", temp->data);
            temp = temp->next;
        }
        printf("NULL\n");
    }
    
    // Display backward
    void displayBackward() {
        Node* temp = head;
        if (!temp) return;
        
        // Go to last node
        while (temp->next != NULL)
            temp = temp->next;
    
        printf("DLL (backward): ");
        while (temp != NULL) {
            printf("%d <-> ", temp->data);
            temp = temp->prev;
        }
        printf("NULL\n");
    }
    
    int main() {
        insertEnd(10);
        insertEnd(20);
        insertEnd(30);
        
        displayForward();
        displayBackward();
        return 0;
    }
    

    Advantages of Doubly Linked List

    • Two-way traversal: You can navigate forward and backward.
    • Easier deletion: You can delete a node without needing the previous node pointer.
    • More flexible: Especially useful in complex data structures like Deques, Undo/Redo systems, Music Playlists, etc.

    Disadvantages of Doubly Linked List

    • More memory: Each node requires extra space for the prev pointer.
    • More complex: Handling pointers can be error-prone for beginners.

    Real-Life Applications of Doubly Linked List

    • Web browsers (backward and forward navigation)
    • Music playlist apps
    • Text editors (undo/redo operations)
    • Task managers (circular doubly linked lists for round-robin)

    Conclusion DLL

    Doubly Linked List
    Master Doubly Linked List in Data Structures (With Examples) 2025

    The Doubly Linked List is an essential topic in Data Structures and Algorithms (DSA). It offers a better way to manage dynamic data, especially when two-way traversal is needed. Though slightly more complex than a singly linked list, the benefits are powerful.

    Whether you’re preparing for a coding interview, building a system-level application, or just learning C programming, mastering DLLs will give you a strong foundation in memory management and pointer logic.

    FAQs of Doubly Linked List

    Q1: Is doubly linked list faster than singly linked list?
    Ans: DLL allows backward traversal and easier deletion, but it uses more memory. It’s more flexible, not necessarily faster.

    Q2: Where is DLL used in real life?
    Ans: Browser history, playlist navigation, undo/redo features, and memory management systems.

    Q3: What is the main drawback of doubly linked list?
    Ans: It uses extra memory due to the additional prev pointer and increases code complexity.

    Q4: How is a doubly linked list different from a circular doubly linked list?
    Ans: In a doubly linked list, the last node’s next pointer is NULL, whereas in a circular doubly linked list, the last node’s next points back to the head, forming a circle.

    Q5: Can a doubly linked list be empty?
    Ans: Yes, initially a doubly linked list can be empty with head pointing to NULL.

    Q6: How do you insert a node at the beginning of a doubly linked list?
    Ans: Create a new node, point its next to the current head, set the head’s prev to the new node, and then update head to the new node.

    Q7: What happens when you delete the last node in a doubly linked list?
    Ans: The second last node’s next pointer is set to NULL, and the last node is freed from memory.

    Q8: Is it possible to implement a stack using a doubly linked list?
    Ans: Yes, a doubly linked list can be used to implement a stack with push and pop operations.

    Q9: How does traversal in a doubly linked list work?
    Ans: You can traverse forward from head to NULL using next pointers or backward from the last node to head using prev pointers.

    Q10: What are the memory requirements for a doubly linked list node?
    Ans: Each node stores data plus two pointers (prev and next), so it uses more memory compared to a singly linked list node, which stores only one pointer.

    Q11: Can doubly linked lists have cycles? How to detect them?
    Ans: Yes, cycles can exist if nodes point back to earlier nodes. Cycle detection algorithms like Floyd’s Cycle-Finding Algorithm (tortoise and hare) can detect cycles.

    Q12: Are doubly linked lists used in databases?
    Ans: Yes, doubly linked lists are used to implement certain data structures like LRU caches, which are common in databases and operating systems.

    Q13: How do you reverse a doubly linked list?
    Ans: Swap the prev and next pointers for each node and update the head to the last node.

  • Mastering Structures and Unions in C: 5 Powerful Tips for 2026 Success

    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;
    };
    
    • Each member is allocated memory separately.
    • Accessed using the dot (.) operator.

    Example of structure in c

    #include <stdio.h>
    
    struct Student {
        int id;
        char name[50];
        float marks;
    };
    
    int main() {
        struct Student s1 = {101, \"Alice\", 85.5};
    
        printf(\"ID: %d\\n\", s1.id);
        printf(\"Name: %s\\n\", s1.name);
        printf(\"Marks: %.2f\\n\", s1.marks);
    
        return 0;
    }
    

    Union in c

    A union is 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

    FeatureStructureUnion
    MemoryEach member has its own memory.All members share the same memory.
    SizeSum of all members\’ sizes.Size of the largest member.
    StorageStores multiple values at a time.Stores only one value at a time.
    AccessAll members can be accessed independently.Only the last assigned member holds a valid value.
    Use CaseUsed 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.

    Example

    #include <stdio.h>
    
    struct Student {
        int id;
        char name[50];
        float marks;
    };
    
    int main() {
        struct Student s1 = {101, \"Alice\", 85.5};  // Structure variable
        struct Student *ptr = &s1;  // Pointer to structure
    
        // Accessing members using pointer
        printf(\"ID: %d\\n\", ptr->id);
        printf(\"Name: %s\\n\", ptr->name);
        printf(\"Marks: %.2f\\n\", ptr->marks);
    
        return 0;
    }
    

    Output:

    ID: 101
    Name: Alice
    Marks: 85.50
    

    Instead of ptr->id, we can also use (*ptr).id, but -> is preferred.

    Dynamic Memory Allocation for Structure Pointer

    You can dynamically allocate memory to a structure using malloc().

    Example

    #include <stdio.h>
    #include <stdlib.h>
    
    struct Student {
        int id;
        char name[50];
        float marks;
    };
    
    int main() {
        struct Student *ptr;
        ptr = (struct Student *)malloc(sizeof(struct Student));  // Memory allocation
    
        if (ptr == NULL) {
            printf(\"Memory allocation failed\\n\");
            return 1;
        }
    
        // Assign values
        ptr->id = 102;
        strcpy(ptr->name, \"Bob\");
        ptr->marks = 90.2;
    
        // Print values
        printf(\"ID: %d\\n\", ptr->id);
        printf(\"Name: %s\\n\", ptr->name);
        printf(\"Marks: %.2f\\n\", ptr->marks);
    
        free(ptr);  // Free allocated memory
        return 0;
    }
    

    Array of Structure Pointers

    We can create an array of pointers to structures for handling multiple records.

    Example

    #include <stdio.h>
    
    struct Student {
        int id;
        char name[50];
        float marks;
    };
    
    int main() {
        struct Student s1 = {101, \"Alice\", 85.5};
        struct Student s2 = {102, \"Bob\", 90.2};
    
        struct Student *arr[] = {&s1, &s2};  // Array of structure pointers
    
        for (int i = 0; i < 2; i++) {
            printf(\"ID: %d, Name: %s, Marks: %.2f\\n\", arr[i]->id, arr[i]->name, arr[i]->marks);
        }
    
        return 0;
    }
    

    Structure Pointer Inside Another Structure

    A structure can have a pointer to another structure.

    Example

    #include <stdio.h>
    
    struct Address {
        char city[50];
        int pin;
    };
    
    struct Student {
        int id;
        struct Address *addr;  // Pointer to Address structure
    };
    
    int main() {
        struct Address addr1 = {\"New York\", 12345};
        struct Student s1 = {101, &addr1};  // Assign address pointer
    
        printf(\"Student ID: %d\\n\", s1.id);
        printf(\"City: %s\\n\", s1.addr->city);
        printf(\"Pin: %d\\n\", s1.addr->pin);
    
        return 0;
    }
    

    Pointer in Union in C

    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.

    Example

    #include <stdio.h>
    
    struct Student {
        int id;
        float marks;
    };
    
    int main() {
        struct Student s1 = {101, 92.5};
        struct Student s2;
    
        s2 = s1; // Structure assignment
    
        printf("s2.id = %d\n", s2.id);
        printf("s2.marks = %.2f\n", s2.marks);
    
        return 0;
    }
    

    What happens here?

    • s1.id → copied to s2.id
    • s1.marks → copied to s2.marks
      The two structures become independent, but contain the same data.

    Important Notes

    • Structure assignment works only if both variables are of the same structure type.
    • It is safe, fast, and supported in C, unlike some other languages.
    • After copying, changing one structure does not affect the other, unless they share pointer addresses.

    Interview Questions on struct in C

    1. Basic Questions

    • What is a struct in C?
    • How does a struct differ from a normal variable?
    • Can a structure contain different data types?
    • How do you define and declare a structure in C?
    • What is the difference between struct and union?
    • How can we initialize a structure in C?
    • How do you access structure members?
    • What is the size of an empty structure in C?
    • Can a structure have an array as a member?
    • Can we declare a structure without defining its members?

    2. Advanced Questions

    • What happens when you assign one structure variable to another?
    • Can you compare two structures using == operator? Why or why not?
    • How can you pass a structure to a function?
    • What is the difference between passing a structure by value and by reference?
    • How do you return a structure from a function?
    • Can a structure contain a pointer to itself? Explain with an example.
    • What is a self-referential structure? Where is it used?
    • Can a structure be nested inside another structure? Provide an example.
    • How is memory allocated for structures in C?
    • How can we reduce structure padding in C?

    3. Struct with Pointers

    • How do you declare a pointer to a structure?
    • What is the difference between ptr->member and (*ptr).member?
    • How do you dynamically allocate memory for a structure using malloc()?
    • Can a structure contain a pointer to another structure? Explain.
    • How do you create an array of structure pointers?
    • How do you free dynamically allocated structures?

    4. Typedef and Struct

    • What is the use of typedef with structures?
    • What is the difference between typedef struct and struct?
    • How do you define an alias for a structure using typedef?
    • What are the advantages of using typedef with structures?

    5. Struct in Real-Time Scenarios

    • How are structures used in embedded systems?
    • How are structures useful in writing device drivers?
    • How do structures help in creating linked lists and trees?
    • Can we create an array of structures? Provide an example.
    • How are structures stored in memory, and how does alignment affect them?
    • What is structure packing, and how is it done in C?
    • What is the use of #pragma pack(1) in structures?
    • How does endianness affect structure storage?
    • How are structures used for network packet handling?
    • How do we write a structure to a file using fwrite()?

    6. Struct vs Other Data Types

    • What is the difference between a struct and a class in C++?
    • How is struct different from enum?
    • Can we have function pointers inside a structure?
    • Can a structure be defined inside a function? What are the implications?
    • Can a structure be declared as const?
    • Can a structure be volatile? What does it mean?

    7. Miscellaneous

    • Can you store a structure in a union?
    • Can we have an anonymous structure in C?
    • How do you create a structure with flexible array members?
    • What is the use of offsetof() macro in C?

    Interview Questions on union in C

    Here is a comprehensive list of union-related interview questions categorized by difficulty level:

    1. Basic Questions

    • What is a union in C?
    • How does a union differ from a struct?
    • What is the syntax of defining and using a union in C?
    • How is memory allocated for a union?
    • What is the size of a union?
    • Can a union store multiple values at the same time?
    • How do you initialize a union in C?
    • How do you access union members?
    • What happens when you assign a value to one member of a union?
    • Can we compare two union variables using ==?

    2. Advanced Questions

    • What is the difference between typedef struct and typedef union?
    • Can a union contain a pointer to itself?
    • How do you pass a union to a function?
    • How do you return a union from a function?
    • What happens if a union has members of different data types and we access the wrong member?
    • What is type punning in union?
    • How can a union be used for endianness conversion?
    • What happens if we use sizeof() on a union?
    • How does union help in saving memory in embedded systems?
    • Can a union contain an array?

    3. Union with Pointers

    • How do you declare a pointer to a union?
    • What is the difference between ptr->member and (*ptr).member in unions?
    • How do you dynamically allocate memory for a union?
    • Can a union contain a pointer as one of its members?
    • How do you create an array of union pointers?

    4. Union with Structures

    • Can a union be inside a struct? Provide an example.
    • Can a struct be inside a union? What are the implications?
    • What is the use case of anonymous unions inside a structure?
    • How do you access a union member inside a structure?
    • How do you manage alignment and padding in structures containing unions?

    5. Real-World Use Cases of Union

    • How are unions used in embedded systems?
    • How does a union help in bit-field manipulation?
    • How are unions used in device drivers?
    • Why are unions useful for memory-mapped registers?
    • How does a union help in interpreting raw data formats?

    6. Best Practices and Miscellaneous

    • What are the advantages and disadvantages of using a union?
    • When should you use a union instead of a struct?
    • Can a union be volatile? When is it useful?
    • What are the risks of using a union with multiple data types?
    • Can we use union inside a union?

    FAQ: Structures and Unions in C – Types, Usage, and Examples

    Frequently Asked Questions (FAQ) on Structures in C

    1. What is a struct in C?

    A struct (structure) in C is a user-defined data type that groups variables of different types under a single name.

    Example:

    struct Student {
        int id;
        char name[50];
        float marks;
    };
    

    2. What is typedef struct and why is it used?

    typedef struct allows you to define a structure with a shorthand alias, improving code readability.

    Example:

    typedef struct {
        int id;
        char name[50];
    } Student;
    

    Now, Student can be used instead of struct Student.

    3. What is a Nested Structure in C?

    A nested structure is a structure inside another structure.

    Example:

    struct Address {
        char city[50];
        int pin;
    };
    
    struct Student {
        int id;
        struct Address addr;  // Nested struct
    };
    

    4. What is a Bit Field Structure in C?

    A bit field structure allows memory-efficient storage of data using specific bit widths.

    Example:

    struct Status {
        unsigned int ready : 1;
        unsigned int error : 1;
        unsigned int processing : 2;
    };
    

    5. What is a Self-Referential Structure in C?

    A self-referential structure is a structure that contains a pointer to itself, commonly used in linked lists.

    Example:

    struct Node {
        int data;
        struct Node *next;  // Self-reference
    };
    

    6. What is an Anonymous Structure in C?

    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:

    struct Student s1;
    struct Student *ptr = &s1;
    ptr->id = 101;
    

    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:

    struct Student *ptr = (struct Student *)malloc(sizeof(struct Student));
    

    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!