关于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的偏移.这真的是便携式的吗?)
发布于 2013-05-10 13:06:19
来自C99标准第6.7.2.1点的第13点:
在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址。指向结构对象的指针,经过适当的转换,指向它的初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然。在structure对象中可能有未命名的填充,但在开始时没有。
因此,你的问题的答案是肯定的。
https://stackoverflow.com/questions/16482784
复制相似问题