This blog is under construction

Tuesday, 23 July 2013

C program to illustrate the difference between structures and unions

Write a C program to demonstrate the difference between structures and unions.

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>

  /* structure with integer and character array data elements */
  struct empStruct {
        int age;
        char name[32];

  /* union with integer and character array data elements */
  union empUnion {
        int age;
        char name[32];

  int main() {
        struct empStruct emp1;
        union empUnion emp2;

         * size of structure is equal to the sum of size of all
         * elements in the structure.  Size of Union is the size
         * of largest element in the union.
        printf("First Difference - Size:\n");
        printf("Structure empStruct:\n");
        printf("sizeof(struct empStruct): %d\n", sizeof(struct empStruct));
        printf("sizeof(emp1.age): %d\n", sizeof(emp1.age));
        printf("sizeof( %d\n", sizeof(;
        printf("sizeof(struct empStruct) <=> "
                         "sizeof(emp1.age) + sizeof(\n\n");

        printf("Union empUnion:\n");
        printf("Size of Union(empUnion): %d\n", sizeof(union empUnion));
        printf("sizeof(emp2.age): %d\n", sizeof(emp2.age));
        printf("sizeof( %d\n", sizeof(;
        printf("sizeof(struct empStruct) <=> "
                           "sizeof([type with large size]\n");
         * only one element can be accessed at a time in union.
         * All variables can be accessed at a time in structure.
        printf("\nSecond Difference - Access Permission:\n");
        printf("Assigning 21 to emp1.age\n");
        emp1.age = 21;
        printf("Assiging Ram to\n");
        strcpy(, "Ram");
        printf("\nContents in struct empStruct:\n");
        printf("struct empStruct {\n");
        printf("\tage = %d\n", emp1.age);
        printf("\tname = %s\n};\n\n",;

        printf("Assigning 21 to emp2.age\n");
        emp2.age = 21;
        printf("Assigning ABCDEFG to\n");

         * contents in will overwrite the contents in
         * emp2.age.  Check the output for better understanding.  So,
         * emp2.age will have 0x41424344.  Its nothing but the
         * ASCII values of A, B, C and D.  Size of integer is 4 bytes
         * So, emp2.age will have first 4 characters in
        strcpy(, "ABCDEFG");

        printf("\nContents in union empUnion:\n");
        printf("union empUnion {\n");
        printf("\tage = 0x%x\n", emp2.age);
        printf("\tname = %s\n};\n\n",;
        printf("\nASCII value of A: 0x%x\n", 'A');
        printf("ASCII value of B: 0x%x\n", 'B');
        printf("ASCII value of C: 0x%x\n", 'C');
        printf("ASCII value of D: 0x%x\n", 'D');
        return 0;


  jp@jp-VirtualBox:~/$ ./a.out
  First Difference - Size:
  Structure empStruct:
  sizeof(struct empStruct): 36
  sizeof(emp1.age): 4
  sizeof( 32
  sizeof(struct empStruct) <=> sizeof(emp1.age) + sizeof(

  Union empUnion:
  Size of Union(empUnion): 32
  sizeof(emp2.age): 4
  sizeof( 32
  sizeof(struct empStruct) <=> sizeof([type with large size]
  Second Difference - Access Permission:
  Assigning 21 to emp1.age
  Assiging Ram to

  Contents in struct empStruct:
  struct empStruct {
age = 21
name = Ram

  Assigning 21 to emp2.age
  Assigning ABCDEFG to

  Contents in union empUnion:
  union empUnion {
age = 0x41424344  //ASCII value of A,B,C & D
name = ABCDEFG

  ASCII value of A: 0x41
  ASCII value of B: 0x42
  ASCII value of C: 0x43
  ASCII value of D: 0x44

No comments:

Post a Comment