输出结果:24
union un { int x; double y; };
union所有成员共享一段内存,所以其大小为占空间最大成员所占空间大小,此处为double,double占8个字节,所以sizeof(union un) = 8。
struct st { char a[10]; union un b; };
struct大小是其所有成员的大小之和,还需要考虑对齐,分以下情况:
如果struct中非数组成员最大为2字节,按2字节对齐,即其大小为2的整数倍;
如果struct中非数组成员最大为4字节,按4字节对齐,即其大小为4的整数倍;
如果struct中非数组成员最大为8字节,按8字节对齐,即其大小为8的整数倍。
由上可知,sizeof(struct st) = sizeof(a) + sizeof(union un) = 16 + 8 = 24,这是因为虽然sizeof(a)=10,但在struct st中要按8字节对齐,所以st::a实际占用为16字节。
PS:上述1、2、3为目前所遇到的情形,不尽之处待补充。
结果是18,你看下对不对(~_~;)
测试结果为
24
截图