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 ));
}
展开
 我来答
帐号已注销
2019-12-17 · TA获得超过317个赞
知道小有建树答主
回答量:345
采纳率:90%
帮助的人:86.8万
展开全部

输出结果: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为目前所遇到的情形,不尽之处待补充。

路之舞者
2019-12-16 · TA获得超过430个赞
知道小有建树答主
回答量:1454
采纳率:78%
帮助的人:213万
展开全部
结果是18,你看下对不对(~_~;)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-12-17
展开全部

测试结果为

24

截图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式