struct foo {
int x;
int y;
int z;
};
如果我为这个结构体分配12字节的内存
我的理解是将为该结构分配一块内存,
如果我先设置x的值,那么内存的前4个字节会转到x吗?编译器如何知道结构体块中 x、y 和 z 的位置
来自语言标准当前草案 n3047(
参考)
6.7.2.1 结构和联合说明符:实际上,其成员的位置通常保持为基地址的“偏移”。因此,假设“正常”条件(没有特殊的对齐或填充规则)和 4 字节的...
在结构体对象中,非位域成员和单位 哪些位域所在的地址按顺序递增 他们是这样宣布的。适当地,指向结构对象的指针 转换后,指向其初始成员(或者如果该成员是 位字段,然后到它所在的单元),反之亦然。 结构对象内可能有未命名的填充,但在其内部则不然 开始。
int
,则 x
的偏移量(以字节为单位)为 0,
y
为 4,
z
为 8。
备注:您不应该
struct foo
对象分配“12个字节”,而应该分配sizeof struct foo
字节。您不能保证
sizeof int
为 4,也不能保证某些其他结构对齐要求有效。
int
32 位有符号整数,请使用
int32_t
中的 <ctype.h>
来代替。