关于C编程语言......
C/C++ Structure offset的部分问题指出“&并不总是指向结构第一个字段的第一个字节”
但是查看http://www.lysator.liu.se/c/rat/c5.html处的“ANSI基本原理”,它在第3.5.2.1节“结构和联合说明符”中指出“开头可能没有漏洞”。所以我不确定“理由”是否具有确定性,但它似乎与那个非常明显的问题的那一部分相矛盾。
那么,这是什么? C结构的第一个字段是否总是保证偏移0?
struct A
{
int x;
};
struct B
{
struct A myA;
int y;
};
B myB;
&myB
保证与便携式&(myB.myA)
相同吗?
(更具体地说,Libev, How to pass arguments to relevant callbacks和许多其他地方的libev用户数据技巧确实假设结构中的第一个字段位于偏移量0 ...真的是可移植的吗?)
答案 0 :(得分:19)
从C99标准部分6.7.2.1要点13:
在结构对象内,非位字段成员和位域中的单位 驻留的地址按声明的顺序增加。指向a的指针 结构对象,适当转换,指向其初始成员(或者如果该成员是a 位字段,然后到它所在的单元,反之亦然。可能有未命名的 在结构对象中填充,但不在其开头。
因此,您的问题的答案是肯定的。