第一个元素偏移

时间:2012-06-09 05:19:55

标签: c malloc free offset

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

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

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

1 个答案:

答案 0 :(得分:6)

是的,这是有保证的。会给你一个标准报价,让我查一查。

C99标准:§6.7.2.1

第12段

  

在结构对象中,非位字段成员和位字段中的单位   驻留的地址按声明的顺序增加。 指向a的指针   结构对象,适当转换,指向其初始成员(或者如果该成员是a   bit-fi eld,然后到它所在的单位),反之亦然。可能有未命名的   在结构对象中填充,但不在其开头。