C语言题这代替怎么做啊,求解析?
main()unionunionun{intx;doubley;};structst{chara[10];unionunb;};main(){printf(“%d\n”,...
main ()
union
union un
{ int x;
double y; };
struct st
{ char a[10];
union un b;};
main()
{ printf(“%d\n”,sizeof(struct st ));
} 展开
union
union un
{ int x;
double y; };
struct st
{ char a[10];
union un b;};
main()
{ printf(“%d\n”,sizeof(struct st ));
} 展开
展开全部
输出结果: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为目前所遇到的情形,不尽之处待补充。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询