This blog is under construction

Wednesday, 8 January 2014

Array of unions

We can create array of unions similar to creating array of any primitive data type. Below is the general form of declaration for array of union.
union  <union_name>  <array_name>[size];

Consider the following example,
union values {
int int_val;
float float_val;
};
union values arr[2];

Here, arr is an array of union which can hold two union elements.

Array of union initialization:
Let us see how to initialize array of union.

union values arr[2] = {{1}, {2}};
The above statement initializes first union member of both the array elements.

union values arr[2] = {{.float_val = 1.1}, {.float_val = 2.2}};
The above statement initialized second union member of both the array elements.

How to access union members?
Now, let us see how to access union members in the array element.

arr[0].float_val = 2.2;
Dot operator(access operator) is used to access union array element's data member.

Note:
In union, only one data member will be active at a time.
Size of a union is the size of its biggest data(union) member.

Array of unions example in C

  #include <stdio.h>
  union values {
        int integer_val;  // union member
        float float_val;  // union member
  };

  int main() {
        /* array of unions initialization */
        union values arr1[2] = {{10}, {20}};
        union values arr2[2] = {{.float_val = 10.01}, 
                                {.float_val = 20.02}};

        /* printing the array contents */
        printf("arr1[0].integer_val: %d\n", arr1[0].integer_val);
        printf("arr1[1].integer_val: %d\n", arr1[1].integer_val);

        printf("arr2[0].float_val: %f\n", arr2[0].float_val);
        printf("arr2[1].float_val: %f\n", arr2[1].float_val);

        /* printing the size of the union */
        printf("Sizeof(union values): %d\n", sizeof(union values));
        return 0;
  }

  Output:
  jp@jp-VirtualBox:~/$ ./a.out
  arr1[0].integer_val: 10
  arr1[1].integer_val: 20
  arr2[0].float_val: 10.010000
  arr2[1].float_val: 20.020000
  Sizeof(union values): 4




No comments:

Post a Comment