C语言题这代替怎么做啊,求解析?

2025-03-07 01:41:52
推荐回答(3个)
回答1:

输出结果:24


union un { int x; double y; }; 

union所有成员共享一段内存,所以其大小为占空间最大成员所占空间大小,此处为double,double占8个字节,所以sizeof(union un) = 8。

struct st { char a[10]; union un b; }; 

struct大小是其所有成员的大小之和,还需要考虑对齐,分以下情况:

  1. 如果struct中非数组成员最大为2字节,按2字节对齐,即其大小为2的整数倍;

  2. 如果struct中非数组成员最大为4字节,按4字节对齐,即其大小为4的整数倍;

  3. 如果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为目前所遇到的情形,不尽之处待补充。

回答2:

结果是18,你看下对不对(~_~;)

回答3:

测试结果为

24

截图