Union in C – GraphGuide.org

Giống như các cấu trúc, Liên minh trong Lập trình C cũng được sử dụng để nhóm các kiểu dữ liệu khác nhau để tổ chức dữ liệu theo cách có cấu trúc. Một liên minh từ khóa dành riêng cho hệ thống được sử dụng để tạo nó.

Không giống như Structures, biến union C bệnh cấp phát bộ nhớ chung cho tất cả các thành viên của nó (tức là tuổi, tên, địa chỉ, v.v.). Kích thước của bộ nhớ chung được cấp phát bằng kích thước của thành viên liên hiệp lớn nhất. Do đó, chúng tôi có thể tiết kiệm nhiều bộ nhớ.

Do bộ nhớ chung này, chúng tôi không thể truy cập tất cả các thành viên đoàn cùng một lúc. Bởi vì biến liên minh C giữ một thành viên tại một thời điểm, chúng tôi có thể truy cập một thành viên tại một thời điểm.

Cú pháp Liên minh C

Cú pháp cơ bản của Union trong Lập trình C như hình dưới đây

union UName
{
  Data_Type Variable_Name; //Member

  Data_Type Variable_Name; //Member

  ………….
};

Đây là từ khóa dành riêng cho hệ thống được sử dụng để tạo và truy cập các thành viên của nó. UName là tên bạn muốn đặt cho điều này. Ví dụ, nhân viên, người, sinh viên.

Data_Type nghĩa là Kiểu dữ liệu của biến mà bạn muốn khai báo. Ví dụ, int, float, char, v.v … Và Variable_Name là tên của biến. Ví dụ: id, tuổi, tên, lương. Ví dụ

union Student //Name = Employee

{

  //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

};

Tuyên bố của Liên minh trong Lập trình C

Trước khi truy cập các thành viên bên trong nó, chúng ta phải tạo các biến. Chúng ta có thể khai báo các biến theo nhiều cách. Phương pháp tiếp cận đầu tiên là khai báo liên minh C trước, sau đó trong hàm main tạo biến.

union Employee

{

  int age;

  char name[50];

  float salary;

};

//Creating the Structure variable

 union Employee emp1, emp2;

 emp1 = {25, "Dave", 25000}

Ở đây, emp1 và emp2 là các biến của kiểu dữ liệu này. Phương pháp tiếp cận thứ hai là tạo các biến tại thời điểm khai báo C union

union Employee

{

  int age;

  char name[50];

  float salary;

} emp1, emp2;

Tiếp cận các thành viên của Union trong lập trình C

Chúng ta có thể truy cập các thành viên liên hiệp C bằng toán tử dấu chấm (.) Hoặc toán tử thành viên. Ví dụ, chúng ta hãy sử dụng ví dụ trên.

//Assigning the values

 emp1.age = 26;

 strcopy (emp1.name, "Michel");

 emp1.salary = 46000.50;

Ví dụ về lập trình Union trong C

Trong chương trình C này, chúng ta sẽ khai báo liên minh với bốn thành viên. Sau đó, chúng tôi sẽ hiển thị từng thành viên riêng lẻ dưới dạng đầu ra theo 2 cách khác nhau. Vui lòng tham khảo bài viết Cấu trúc trong Lập trình C để hiểu các cấu trúc.

#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 nn", 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;
}

Trong chương trình ví dụ công đoàn C này, chúng tôi đã khai báo Nhân viên có tuổi, Tên, Bộ phận và Mức lương với các Loại dữ liệu thích hợp. Trong hàm main (), Chúng tôi đã tạo 2 biến emp1 và emp2 cho Employee.

Thông tin chi tiết về việc làm đầu tiên

Từ câu lệnh dưới đây, bạn có thể thấy rằng biến C Union sẽ cấp phát bộ nhớ cho thành viên age. Nó có nghĩa là giá trị của 28 được lưu trữ trong vị trí bộ nhớ cho tuổi (tuổi = 28).

emp1.age = 28;

Từ câu lệnh dưới đây, bạn có thể thấy rằng biến C Union phải cấp phát bộ nhớ cho thành viên Name. Vì vậy, nó sẽ xóa dữ liệu của mục nhập trước đó, tức là tuổi. Sau đó, nó sẽ cấp phát cùng một bộ nhớ cho thành viên Tên. Nó có nghĩa là Chris được lưu trữ trong một vị trí bộ nhớ (Đã thay thế tuổi ở đây).

strcpy(emp1.Name, "Chris");

Bây giờ biến C Union phải cấp phát bộ nhớ cho thành viên Bộ phận. Vì vậy, nó sẽ xóa dữ liệu của mục nhập trước đó, tức là Tên. Sau đó, nó sẽ cấp phát cùng một bộ nhớ cho thành viên Bộ phận. Nó có nghĩa là Khoa học được lưu trữ trong một vị trí bộ nhớ (Đã thay thế Chris ở đây).

strcpy(emp1.Department, "Science");

Tiếp theo, biến C Union phải cấp phát bộ nhớ cho thành viên Lương. Vì vậy, nó sẽ xóa dữ liệu của mục nhập trước đó tức là Phòng, và cấp phát cùng một bộ nhớ cho thành viên Lương. Nó có nghĩa là 32000,70 được lưu trữ trong vị trí bộ nhớ (Đã thay thế Khoa học ở đây).

emp1.Salary = 32000.70;

Các câu lệnh printf dưới đây được sử dụng để xuất ra các giá trị mà chúng tôi đã gán cho các thành viên. Câu lệnh sau sẽ hiển thị giá trị sai hoặc lạ vì các giá trị khác đã thay thế giá trị tuổi

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

Câu lệnh sau sẽ hiển thị giá trị sai hoặc lạ vì các giá trị khác đã thay thế giá trị Tên

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

Bên dưới câu lệnh công đoàn C hiển thị giá trị lạ hoặc sai vì giá trị Bộ phận đã được thay thế bằng Lương.

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

Câu lệnh sau sẽ in ra giá trị Lương chính xác. Bởi vì sau đó, chúng tôi đã không gán vị trí bộ nhớ cho các giá trị khác.

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

Thông tin chi tiết về Nhân viên thứ hai. C Union cho phép chúng tôi truy cập một thành viên dữ liệu tại một thời điểm. Vì vậy, trong biến này, chúng tôi sẽ hiển thị đầu ra ngay sau khi gán giá trị cho thành viên dữ liệu đó.

emp2.age = 30;

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

Biến Union sẽ cấp phát bộ nhớ cho thành viên tuổi. Nó có nghĩa là giá trị của 28 lưu trữ trong vị trí bộ nhớ cho tuổi (tuổi = 28). Sau khi gán giá trị, nó sẽ ngay lập tức in đầu ra của tuổi.

Bây giờ biến C Union phải cấp phát bộ nhớ cho thành viên Name. Vì vậy, nó loại bỏ dữ liệu của mục nhập trước đó, tức là tuổi. Sau đó, nó sẽ cấp phát cùng một bộ nhớ cho thành viên Tên. Nó có nghĩa là David được lưu trữ trong một vị trí bộ nhớ (Đã thay thế tuổi ở đây).

strcpy(emp2.Name, "David");

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

MẸO: Nếu bạn quên in câu lệnh ngay lập tức, dữ liệu sẽ bị xóa và được phân bổ cho thành viên tiếp theo.

Quá trình này cũng tương tự đối với các câu lệnh dưới đây

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

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