typedef struct s1{ char a; short b; char c; int c; }s1; sizeof(s1) //??? 结构体s1为什么是12字节

 我来答
xgn911
2022-11-28 · TA获得超过1364个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:650万
展开全部

因为字节对齐,类或结构体中字节对齐的三个准则:

1) 结构体的首地址能够被其最宽基本类型成员的大小所整除;

2) 结构体每个成员相对于结构体首地址的偏移量是该成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;

3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。

typedef struct s1 { 

    char a; // 地址范围为[0],占1字节

    short b; // 地址范围为[2:3],占2字节,首地址2须为2的整数倍,前面填充了1个字节

    char c; // 地址范围为[4],占1字节

    int c; // 地址范围为[8:11],占4字节,首地址8须为4的整数倍,前面填充了3个字节

}s1; 

地址范围为[0:11],中间填充了4个字节,因此sizeof(s1)=1+1+2+1+3+4=12

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式