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 car
loạ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
car1
,car1.price
is used. - To access price using
car3
, either(*car3).price
orcar3->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