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.



Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -