第一个元素偏移(First element offset)

2019-09-17 22:35发布

它是一个保证,即结构的第一个元素是0偏移? 为了更准确,让我们考虑

struct foo {
int a;
double b;
};
struct foo *ptr=malloc(sizeof(struct foo));
int *int_ptr = &ptr->a;
free(int_ptr)

它是garantied,它是有效的始终,在任何操作系统或任何其他因素?

Answer 1:

是的,它是保证。 将让你一个标准的报价,让我查找。

C99标准:§6.7.2.1

12

内的结构对象,非比特音响场构件和单元,其中比特音响视场驻留具有在其声明的顺序增加的地址。 一个指向结构对象,适当地转换,点到它的初始成员(或如果该构件是一个比特音响场,然后在它所在的单元),并且反之亦然。 有可能是一个结构对象中的无名进行填充,而不是在其开始。



文章来源: First element offset