C union


Union is a special data type that allows you to store different data types in the same memory location. You can define a union with multiple members, but only one member can have a value at any time. Unions provide an efficient way to use the same memory location.

Define a union

In order to define a union, you must use a union statement, similar to how you define a structure. The union statement defines a new data type with multiple members. The format of the union statement is as follows:

union [union tag]{
   member definition;
   member definition;   ...
   member definition;} [one or more union variables];

union tag is optional, and each member definition is a standard variable definition, such as int i; or float f; or other valid variable definitions . At the end of the union definition, before the last semicolon, you can optionally specify one or more union variables. A union type named Data is defined below, with three members i, f and str:

union Data{   int i;   float f;   char  str[20];} data;

Now, a variable of type Data can store an integer, a floating point number, or a string. This means that one variable (same memory location) can store multiple data of multiple types. You can use any built-in or user-defined data type within a community as needed.

The memory occupied by the union should be enough to store the largest member in the union. For example, in the above example, Data will occupy 20 bytes of memory space because the string occupies the largest space among various members. The following example will display the total memory size occupied by the above union:

#include <stdio.h>#include <string.h> union Data{   int i;   float f;   char  str[20];}; int main( ){   union Data data;        

   printf( "Memory size occupied by data : %d\n", sizeof(data));   return 0;}

When the above code is compiled and executed, it will produce the following results:

Memory size occupied by data : 20

Accessing Union Members

In order to access the members of the union, we use the member access operator (.). The member access operator is a period between the union variable name and the union member we want to access. You can use the union keyword to define variables of union type. The following example demonstrates the use of a union:

#include <stdio.h>#include <string.h> union Data{   int i;   float f;   char  str[20];}; int main( ){   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);   return 0;}

When the above code is compiled and executed, it will produce the following results:

data.i : 1917853763data.f : 4122360580327794860452759994368.000000data.str : C Programming

Here, we can see the The values ​​of the i and f members are damaged because the last value assigned to the variable occupies the memory location, which is why the str member can be output intact. Now let's look at the same example again, this time we are using only one variable at a time, which also demonstrates the main purpose of using unions:

#include <stdio.h>#include <string.h> union Data{   int i;   float f;   char  str[20];}; int main( ){   union Data data;        

   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);   return 0;}

When the above code is compiled and executed, it The following results will be produced:

data.i : 10data.f : 220.500000data.str : C Programming

Here, all members can be output intact because only one member is used at the same time.