C UNION


Unions are mainly used to conserve memory. Unions are a special form of Structures. Unions also follow the same syntax as structures. The major distinction between them is in the terms of storage. Unions are mainly used to conserve memory. In structures, each member has its own storage location, whereas all the members of a union use the same location. Though unions may contain many members of different types, it can handle only one member at a time. Unions are useful in applications involving multiple members where values are not assigned to all the members at any one time.

Unions can be declared using the keyword union as follows:

union tag
{
	member1;
	member 2;
	- - -
	member m;
};


Where union is a required keyword and the other terms have the same meaning as in a structure definition.

Individual union variables can then be declared as
union tag variable1,variable2, -----, variable n;
where union is a required keyword, tag is the name that appeared in the union definition and variable 1, variable 2, variable n are union variables of type tag.

The two declarations may be combined, just as we did in the case of structure. Thus, we can write.

union tag
{
	member1;
	member 2;
	- - -
	member m;
} variable 1, varibale2. . . variable n;


The tag is optional in this type of declaration.
For example consider the following declaration of union:

union code
{
	char color [5];
	int size ;
}purse, belt;


Here we have two union variables, purse and belt, of type code. Each variable can represent either a 5–character string (color) or an integer quantity (size) of any one time.

Consider another example :

union item
{
	int m;
	float x;
	char c;
}code;

This declares a variable of type union item. The union contains three members, each with a different data type. However, we can use only one of them at a time. This is due to the fact that only one location is allocated for a union variable, irrespective of size. The compiler allocates a piece of storage that is large enough to hold the largest variable type in the union. In the declaration above the member x requires 4 bytes which is the largest among the members.
In short, structures occupy the memory which is the sum total of memory occupied by all the members in it whereas a union occupies the memory equal to the memory of the largest variable type.
To access a union member, we can use the same syntax that we can use for structure members. That is,
code.m
code.x
code.c
During accessing, we should make sure that we are accessing the member whose value is currently stored.
For example, the statements such as
code.m = 65;
code.x = 6651.38;
printf("%d".code.m);
The above would produce erroneous output(which is machine dependent);