Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
是保证,结构的第一个元素的偏移量为 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 段
在结构对象中,非位域成员和位域所在的单元的地址按声明顺序递增。一个指向结构对象的指针,经过适当的转换,指向它的初始成员(或者如果该成员是位域,则指向它所在的单元),反之亦然。结构对象中可能有未命名的填充,但不是在其开头。