则sizeof(struct test )的值

https://www.nowcoder.com/test/question/done?tid=19976256&qid=112524#summary

若有下面的说明和定义:

1

2

3

4

5

6

struct test

{ int ml;

char m2; float m3;

union uu

{char ul[5]; int u2[2];} ua;

} myaa;

则sizeof(struct test )的值是( )。

对齐方式由 编译器的対界方式 和 自身的対界方式 取较小的那一个

编译器的対界方式默认为8,可以以宏的方式进行设置

#pragma pack(x) x为对齐的字节大小

本题中没有设置编译器,固为默认的8,这里看自身的対界方式。

struct(还有union,class)的対界方式为最大的数据成员的大小。

在struct里面为4(int),在union里面也为4(int),

综合判断4 < 8,固对齐方式为4个字节

接下来看sizeof(struct test)的大小,除union部分外

sizeof(int)+size(char)+sizeof(float) = 4 + 1 + 4 = 9

对union来说大小为成员定义里面最大的那个

5*sizeof(char) = 5 < 2*sizrof(int) = 8;

固union的sizeof(union uu)为 8 ,

因此总的大小为 9 + 8 = 17,考虑到对齐的方式为4字节,

因此向开界20对齐。答案为 A

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值