在一个union类型结构中,所有的成员公用同样的存储空间,其占用的大小为其成员中需要空间最大者;
union本身只保留一块地址空间,因为只有一个成员真正存储于该地址, 但这块地址也要满足内存对齐原则。
1 #include <stdio.h> 2 3 union U1 { 4 int a; 5 char b; 6 }; 7 8 union U2 { 9 char a[9]; 10 double b; 11 }; 12 13 union U3 { 14 U1 a; 15 U2 b; 16 char c[18]; 17 }; 18 int main() { 19 printf("size of U1: %ld ", sizeof(U1)); 20 printf("size of U2: %ld ", sizeof(U2)); 21 printf("size of U3: %ld ", sizeof(U3)); 22 return 0; 23 }
注意U3对齐还是以前面的double进行对齐,所以应该是对齐到下一个8的位数,也就是24,而不是20.
1 root@xxj-VirtualBox:~/interview# ./union 2 size of U1: 4 3 size of U2: 12 4 size of U3: 20