第一个元素偏移
它是保证,结构的第一个元素的偏移是0吗? 为了更准确,我们考虑一下
struct foo { int a; double b; }; struct foo *ptr=malloc(sizeof(struct foo)); int *int_ptr = &ptr->a; free(int_ptr)
在任何操作系统或任何其他因素下,它是否始终有效?
是的,它是有保证的。 会给你一个标准报价,让我查找。
C99标准:§6.7.2.1
第12段
在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址。 指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然。 结构对象中可能存在未命名的填充,但不是在其开头。