Summary: in this tutorial, you’ll learn about a new type called C union and how to use it effectively in your program.
What is a C union?
A structure allows you to define a new data type with multiple related fields. Each field takes up a separate storage location. For example:
struct point
{
int x;
int y;
};
Code language: C++ (cpp)
The point
structure has two fields x-coordinate and y-coordinate. Each takes up a separate space in the memory.
A union is similar to a structure. However, it defines a single location to store values of different fields at a single point in time.
union quantity {
int i_value;
float f_value;
}
Code language: C++ (cpp)
In this quantity
union, the i_value
and f_value
fields share the same memory location.
The following picture illustrates the difference between a structure and a union:
By definition, a union is a type that stores different values in the same memory location but not at the same time. A union is a group of data objects that share a single block of memory.
C union syntax
The syntax of defining a union is similar to the syntax of defining a structure type. The following illustrates the syntax for defining a union:
union union_name
{
type field_name;
type field_name;
//...
};
Code language: C++ (cpp)
In this syntax:
- First, start with the
union
keyword followed by the union name. - Second, specify the fields with types.
To access a member of a union, you use the ( .
) operator like this:
Code language: C++ (cpp)union_name.field
Union vs. Structure
In a structure, each field stores data separately. If you change the value of one field of a structure, the values of the other fields do not change.
However, in a union, all the fields share the same block of memory. This block of memory is big enough to store the value of the largest field. Smaller members use as much memory as necessary. If you change the value of a field, the values of other fields also change.
If you need to store data in members simultaneously, you need to use a structure.
Initialize a union
C allows you to initialize a union in two ways:
- Initialize a union by initializing the first member of a union.
- Or initialize a union by assigning it to another union with the same type.
The following program demonstrates how to initialize a union in both ways.
#include <stdio.h>
#include <stdlib.h>
int main()
{
typedef union
{
char ch;
int flag;
float f;
} data;
data d;
d.ch = 'A';
// initialize one union to another
data d2 = d;
// initialize first member of union
data d3 = {'B'};
return 0;
}
Code language: C++ (cpp)
C Union Example
In this example, we have an account
structure that could be personal
or business
account based on the account_type
enumeration. If it is a personal account the info
member is associated with the person
structure, otherwise, it is associated with the company
structure.
Just take few minutes go through the code to have a better understanding of using the C Union.
#include <stdio.h>
#include <stdlib.h>
// define account type: personal or business
enum account_type
{
personal = 1,
business = 2
};
// person name
struct person
{
char *name;
};
// company with name and tax no
struct company
{
char *name;
char *tax_no;
};
// profile
typedef union
{
struct person individual;
struct company biz;
} profile;
// account
typedef struct
{
char *username;
char *password;
enum account_type type;
profile info;
} account;
void display(account acc);
int main()
{
printf("Union Demo\n");
account acc1, acc2;
acc1.type = personal;
acc1.username = "acc1";
acc1.password = "secret";
acc1.info.individual.name = "John Doe";
display(acc1);
acc2.type = business;
acc2.username = "acc2";
acc2.password = "secret2";
acc2.info.biz.name = "My Company";
acc2.info.biz.tax_no = "112121";
display(acc2);
return 0;
}
/*
displays account on the screen
*/
void display(account acc)
{
switch (acc.type)
{
case personal:
printf("Personal Account\n");
printf("Username:%s\nName:%s\n", acc.username,
acc.info.individual.name);
break;
case business:
printf("Business Account\n");
printf("Username:%s\nCompany:%s\nTax no.:%s\n", acc.username,
acc.info.biz.name,
acc.info.biz.tax_no);
break;
}
printf("-------------------------------\n");
}
Code language: C++ (cpp)
In this tutorial, you have learned how to use C union and understand the differences between a union and a structure.