Union in C

Like Structures, Union in C Programming is also used to group different data types to organize the data in a structural way. A system reserved keyword union used to create Union.

Unlike Structures, the C union variable will allocate the common memory for all of its union members (i.e., age, name, address, etc.). The size of the allocated common memory is equal to the size of the largest union member. Due to this, we can save much memory.

Due to this common memory, we can’t access all the union members at the same time. Because the C union variable holds one member at a time, we can access one union member at a time.

C Union Syntax

The basic syntax of the Union in C Programming is as shown below

union Union_Name
{
  Data_Type Variable_Name; //Union Member

  Data_Type Variable_Name; //Union Member

  ………….
};

union is the system reserved keyword used to create union and accessing union members. The Union_Name is the name you want to give for the Union. For example, employees, persons, students.

Data_Type means Data type of the variable that you want to declare. For example, int, float, char, etc. And the Variable_Name is the name of the variable. For example, id, age, name, salary. For Example

union Student // Union Name = Employee

{

  //Union Members
  int Roll_No; //Data Type = int; Variable Name = Roll_No

  char name[50]; //Data Type = char Array; Variable Name = name

  char address[100]; //Data Type = Char Array; Variable Name = address

};

Declaration of Union in C Programming

Before accessing the members inside the union, we have to create the union variables. We can declare the C union variables in multiple ways. The First Approach is declaring the Union first, and then in the main function create the union variable

union Employee

{

  int age;

  char name[50];

  float salary;

};

//Creating the Structure variable

 union Employee emp1, emp2;

 emp1 = {25, "Dave", 25000}

Here, emp1 and emp2 are the variables of data type union. The second Approach is to create union variables at the time of the C union declaration

union Employee

{

  int age;

  char name[50];

  float salary;

} emp1, emp2;

Accessing Members of Union in C Programming

We can access the C union members using the dot operator (.) or members operator. For example, let us use the above example.

//Assigning the values

 emp1.age = 26;

 strcopy (emp1.name, "Michel");

 emp1.salary = 46000.50;

Union in C Programming Example

In this Union in C program, we are going to declare the Union with 4 union members. Then we will display every individual union member as output in 2 different ways. Please refer Structures article in C Programming to understand the structures.

/* Union in C Programming example */
#include <stdio.h> 
#include <string.h> 

union Employee 
{
  int age;  
  char Name[50];
  char Department[20];
  float Salary;
};

int main() 
{
  union Employee emp1;
  union Employee emp2;
    
    emp1.age = 28;
    strcpy(emp1.Name, "Chris");
    strcpy(emp1.Department, "Science");
    emp1.Salary = 32000.70;

  printf("\nDetails of the First Employee \n");
 
  printf("  Employee Age = %d \n", emp1.age);
  printf("  Employee Name = %s \n", emp1.Name);
  printf("  Employee Department = %s \n", emp1.Department);
  printf("  Employee Salary = %.2f \n\n", emp1.Salary);

  printf("Details of the Second Employee \n" );

  emp2.age = 30;
  printf("  Employee Age = %d \n", emp2.age );
  
  strcpy(emp2.Name, "David");
  printf("  Employee Name = %s \n", emp2.Name );

  strcpy(emp2.Department, "Technology" );
  printf("  Employee Department = %s \n ", emp2.Department );

  emp2.Salary = 35000.20;
  printf("  Employee Salary = %.2f \n ", emp2.Salary );

  return 0;
}
Union in C Programming

Within this C union example program, we declared the Employee Union with age, Name, Department, and Salary members with appropriate Data Types. Within the main() function, We created 2 union variables emp1 and emp2 for the Employee Union.

Details of the First Employee

From the below statement, you can see that the C Union variable will allocate memory for the age member. It means the value of 28 stored in the memory location for age (age = 28).

emp1.age = 28;

From the below statement, you can observe that the C Union variable has to allocate memory for the Name member. So, it will remove the data of previous entry i.e., age. Then it will allocate the same memory to the Name member. It means Chris is stored in a memory location (Replaced age here).

strcpy(emp1.Name, "Chris");

Now the C Union variable has to allocate memory for the Department member. So, it will remove the data of previous entry i.e., Name. Then it will allocate the same memory to the Department member. It means Science stored in a memory location (Replaced Chris here).

strcpy(emp1.Department, "Science");

Next, the C Union variable has to allocate memory for the Salary member. So, it will remove the data of previous entry i.e., Department, and allocates the same memory to the Salary member. It means 32000.70 stored in the memory location (Replaced Science here).

emp1.Salary = 32000.70;

The below printf statements are used to output the values we assigned for the union members. The following statement will display wrong or strange value because other values already replace the age value

printf(" Employee Age = %d \n", emp1.age);

The following statement will display wrong or strange value because other values already replace the Name value

printf(" Employee Name = %s \n", emp1.Name);

Below C union statement displays strange or wrong value because the Department value already replaced by Salary.

printf(" Employee Department = %s \n", emp1.Department);

The following statement prints the correct Salary value. Because after this, we haven’t assigned the memory location to other values.

printf(" Employee Salary = %.2f \n", emp1.Salary);

Details of the Second Employee. The C Union allows us to access one data member at a time. So in this union variable, we will display the output immediately after assigning the value to that data member.

emp2.age = 30;

printf(" Employee Age = %d \n", emp2.age);

Union variable will allocate memory for the age member. It means the value of 28 stores in the memory location for age (age = 28). After assigning the value, it is immediately printing the output of age.

Now the C Union variable has to allocate memory for the Name member. So, it removes the data of previous entry, i.e., age. Then it will allocate the same memory to the Name member. It means David stored in a memory location (Replaced age here).

strcpy(emp2.Name, "David");

printf(" Employee Name = %s \n", emp2.Name);

TIP: If you forget to print the statement immediately, the data will remove, and allocated to the next union member.

The process is the same for the below statements also

strcpy(emp2.Department, "Technology");
printf(" Employee Department = %s \n", emp2.Department);

emp2.Salary = 35000.20;
printf(" Employee Salary = %.2f \n\n", emp2.Salary);