2012-06-09 92 views
3

它是一个担保,第一个元素的偏移量是0吗? 更准确,让我们考虑第一个元素偏移量

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

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

+0

Under * any * OS or * any * other factors?我不知道这是否可以回答 - 无论是在语言规范中是一个不同的故事。 – jedwards

+0

不应该读取'int * int_ptr =&ptr-> a;'? – lindelof

+1

是的,更正的代码。 – KAction

回答

6

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

C99标准:§6.7.2.1

第12段

内的结构对象,非比特音响场构件和单元,其中比特音响视场 驻留有地址按其声明的顺序增加。 指向 结构对象的指针经适当转换后指向其初始成员(如果该成员是位域,则指向其所在的单位),反之亦然。在结构对象中可能存在未命名的 填充,但不在其开始处。

+1

§6.7.2.15似乎是正确的:“*一个指向 结构对象的指针,经适当转换后,指向其初始成员(或者如果该成员是位域,则返回其所在单位),以及反之亦然**在结构对象中可能有未命名的 填充,但不在其开头**。“” – DCoder

+0

@DCoder:啊,你击败了我:) –

相关问题