如何解释 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 宏。