如何解释 C 中结构的成员访问(点)运算符?
How is the member access (dot) operator on structures in C interpreted?
我们在结构中使用点运算符来访问结构的特定元素。
现在如果我有一个结构:
struct x {
int a;
float b;
};
并且我创建了一个对象 struct x obj
,那么在编译器中究竟如何解释 obj.b
以便访问 b? b在结构中的地址位置是如何计算的?
struct x
的每个实例都会有相同的布局,这是根据你平台的ABI决定的。 C标准对这种布局提出了一些要求,比如成员必须按照声明顺序排列,但平台在对齐和填充方面有相当大的灵活性。
数据类型 struct x
的布局将结合内存中 obj
开始位置的知识,以便定位 obj.b
。如果您有兴趣学习布局,您可能需要使用 <stddef.h>
中的 offsetof
宏。
我们在结构中使用点运算符来访问结构的特定元素。
现在如果我有一个结构:
struct x {
int a;
float b;
};
并且我创建了一个对象 struct x obj
,那么在编译器中究竟如何解释 obj.b
以便访问 b? b在结构中的地址位置是如何计算的?
struct x
的每个实例都会有相同的布局,这是根据你平台的ABI决定的。 C标准对这种布局提出了一些要求,比如成员必须按照声明顺序排列,但平台在对齐和填充方面有相当大的灵活性。
数据类型 struct x
的布局将结合内存中 obj
开始位置的知识,以便定位 obj.b
。如果您有兴趣学习布局,您可能需要使用 <stddef.h>
中的 offsetof
宏。