内存中相邻类型的相邻结构成员是否相邻?

时间:2015-04-11 12:44:54

标签: c portability pointer-arithmetic

使用ISO 9899:2011(即C11)描述的语言,T是完整的数据类型和声明

struct { T a, b; } s;

我可以假设&s.a + 1 == &s.b吗? C语言修订版之间的情况是否发生了变化?

2 个答案:

答案 0 :(得分:3)

没有。除了在第一个成员之前不能进行初始填充之外,该标准不要求结构填充或缺少结构填充。

当然,每个结构成员必须正确对齐其类型。

答案 1 :(得分:0)

不便携。所有标准保证是结构中成员的偏移量严格增加。工具链可以随意添加任何喜欢的填充。