C Unions – kiểu dữ liệu đặc biệt bạn tự đặt tên

Trong hướng dẫn này, bạn sẽ tìm hiểu về các kiểu dữ liệu có thể bao bọc các kiểu dữ liệu khác mà bạn tự đặt tên lưu trữ trong cùng bộ nhớ.

Tìm hiểu union structs trong C nó khác nhau như nào?

structs và union là kiểu cấu trúc tương đối giống nhau được khởi tạo đủ không gian lưu trữ tất cả các hàm và phương thức của nó. Đây là 1 ví dụ

union car
{
  char name[50];
  int price;
};

Đoạn mã trên xác định một kiểu dẫn xuất union car.

Tạo biến union

Khi một union được xác định, nó sẽ tạo ra một kiểu do người dùng xác định. Tuy nhiên, không có bộ nhớ nào được cấp phát. Để cấp phát bộ nhớ cho một kiểu liên hợp nhất định và làm việc với nó, chúng ta cần tạo các biến.

Đây là cách chúng tôi tạo các biến liên hợp.

union car
{
  char name[50];
  int price;
};

int main()
{
  union car car1, car2, *car3;
  return 0;
}

Một cách khác để tạo biến liên hợp là:

union car
{
  char name[50];
  int price;
} car1, car2, *car3;

Trong cả hai trường hợp, các biến đoàn car1 , car2 , và một con trỏ đoàn car3 của union carloại được tạo ra.

Truy xuất gọi hàm và phương thức trong của union

Trong ví dụ trên,

  • To access price for car1car1.price is used.
  • To access price using car3, either (*car3).price or car3->price can be used.

Sự khác biệt giữa union và structs

Hãy lấy một ví dụ để chứng minh sự khác biệt

#include <stdio.h>
union unionJob
{
   //defining a union
   char name[32];
   float salary;
   int workerNo;
} uJob;

struct structJob
{
   char name[32];
   float salary;
   int workerNo;
} sJob;

int main()
{
   printf("size of union = %d bytes", sizeof(uJob));
   printf("\nsize of structure = %d bytes", sizeof(sJob));
   return 0;
}

Đầu ra

size of union = 32
size of structure = 40

Tại sao lại có sự khác biệt về kích thước của biến union và biến structs?

Ở đây, kích thước của sJob là 40 byte vì

  • the size of name[32] is 32 bytes
  • the size of salary is 4 bytes
  • the size of workerNo is 4 bytes

Tuy nhiên, kích thước của uJob là 32 byte. Đó là bởi vì kích thước của một biến liên hợp sẽ luôn là kích thước của phần tử lớn nhất của nó. Trong ví dụ trên, kích thước của phần tử lớn nhất của nó, ( name[32]), là 32 byte.

Ví dụ: Tiếp cận phương thức con

#include <stdio.h>
union Job {
   float salary;
   int workerNo;
} j;

int main() {
   j.salary = 12.3;

   // when j.workerNo is assigned a value,
   // j.salary will no longer hold 12.3
   j.workerNo = 100;

   printf("Salary = %.1f\n", j.salary);
   printf("Number of workers = %d", j.workerNo);
   return 0;
}

Đầu ra

Salary = 0.0
Number of workers = 100








Gõ tìm kiếm nhanh...