Skip to main content

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




Comments

Popular posts from this blog

Array of pointer to structure

Array of pointer to structure is nothing but an array whose elements are pointers to structure How to declare array of pointer to structure? Below is an example declaration for array of pointer to structure. struct student *arr[10]; Here, arr is an array 10 of pointer to structure student. Dynamic memory allocation: Below is the procedure to perform dynamic memory allocation for the structure pointers in an array. struct student { int age; char name[32]; }; fun() { int i = 0; struct student *arr[10]; for (i = 0; i < 10; i++) { /* dynamic memory allocation for 5 structure objects */ arr[i] = (struct student *)malloc(sizeof(struct student) * 5); } } Write a c program to pass an array of structure pointers to another function   #include <stdio.h>   #include <stdlib.h>   #include <string.h>   struct student {         int age, rollno;         char name[32];   };   /* printing details of stude...

Nested function in C

What is nested function? If a function is defined inside another function, then it is called as nested function.  Nested function example in C: Consider the following example, int add(int a, int b) {        void print(int res) {          printf("Result is %d, res);       }       print(a+b);       return 0; } Here, print() is a nested function.  Because, it is defined inside another function named add() . Example C program using nested functions: #include <stdio.h> void add(int a, int b) { void print(int res) { // nested function printf("Result is %d\n", res); return; } print(a + b); // passing sum of a and b as parameter return; } int main() { add(10, 20); return 0; }   Output:   jp@jp-VirtualBox:~/$ ./a.out   Result is 30 Previous Next

Difference between asterisk and ampersand operators in c

Address Operator (& - Ampersand): Returns address of the given variable.  Consider the following example, int *ptr, var = 10; ptr = &var; ptr = &var sets the address of the variable var to pointer ptr.  & is also called as reference operator. Let us try to understand the purpose of reference operator using the following example program.   #include <stdio.h>   int main() {         int var = 10, *ptr;         /* assigning address of variable var to pointer ptr */         ptr = &var;         /* printing the address of the variable var */         printf("Address of var is 0x%x\n", &var);         /* printing the value of pointer ptr */         printf("Value of ptr is 0x%x\n", ptr);         return 0;   }   Output:   jp@jp-VirtualBox:~/$ ./a.out   Address of var is 0x...