结构的第一个元素的偏移量是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段
在结构对象中,非位字段成员和位字段所在的单元
reside的地址按声明顺序递增。指向
结构对象,经过适当转换,指向其初始成员(或者如果该成员是
位字段,然后是它所在的单元,反之亦然。可能有不知名的
在结构对象中填充,但不在其开始处填充。

关于c - 第一元素偏移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10958576/

10-10 14:02
查看更多