- Back to Home »
- C »
- C - Unions
Monday, April 27, 2015
Union là một kiểu dữ liệu đặc biệt cho phép lưu trữ nhiều dữ liệu khác nhau trong cùng một vùng nhớ, có thể định nghĩa nhiều field trong union nhưng trong một thời điểm, chỉ có một field mang giá trị có ý nghĩa. Size của union bằng với size của field có size lớn nhất.
Union được dùng khi ta muốn liệt kê tất cả các thuộc tính của một đối tượng, tuy nhiên ở một thời điểm ta chỉ quan tâm đến một thụôc tính nào đó mà không cần quan tâm đến giá trị của các thuộc tính khác. Vì thế dùng union sẽ giúp tiết kiệm bộ nhớ.
Khai báo:
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];
Ex:
union.c
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
} data;
int main()
{
printf("sizeof data.i: %d \n", sizeof(data.i));
printf("sizeof data.f: %d \n", sizeof(data.f));
printf("sizeof data.str: %d \n", sizeof(data.str));
printf("sizeof data: %d \n", sizeof(data));
data.i = 20;
printf("\n");
printf("data.i = %d \n", data.i);
printf("data.f = %f \n", data.f);
printf("data.str = %s \n", data.str);
data.f = 20.5f;
printf("\n");
printf("data.i = %d \n", data.i);
printf("data.f = %f \n", data.f);
printf("data.str = %s \n", data.str);
strcpy(data.str, (char*)"Hello");
printf("\n");
printf("data.i = %d \n", data.i);
printf("data.f = %f \n", data.f);
printf("data.str = %s \n", data.str);
return 0;
}
Compile & Execute
$ gcc union.c
$ ./a.out
sizeof data.i: 4
sizeof data.f: 4
sizeof data.str: 20
sizeof data: 20
data.i = 20
data.f = 0.000000
data.str =
data.i = 1101266944
data.f = 20.500000
data.str =
data.i = 1819043144
data.f = 1143139122437582505939828736.000000
data.str = Hello
Như vậy có thể thấy 3 trường i, f, str cùng nằng chung một vùng nhớ, trong đó field str có size lớn nhất, vì thế size của biến union data bằng với size của str. Trong một thời điểm chỉ có một trường mang giá trị có ý nghĩa.