为什么班级成员的地址与他们的对象相同?

use*_*214 4 c++

在下列情况下,每个成员都有不同的名称或实体,为什么他们的地址相同?

struct B { int x; };
struct A { B b; };

int main()
{
    A obj;
    cout << &obj.b.x << endl;
    cout << &obj.b << endl;
    cout << &obj << endl;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 8

因为指向结构的指针总是指向它的第一个成员(因为结构是按顺序排列的).

在C中,指向结构的指针总是指向其第一个成员吗?

(C1x§6.7.2.1.13:"指向结构对象的指针,适当转换,指向其初始成员......反之亦然.在结构对象中可能有未命名的填充,但不在其开头.")

注意: mange指出,理所当然,如果你开始向你的结构中添加虚函数,C++通过在结构的开头添加vtable来实现这个...这使得我的语句(对于C来说是真的)在你的时候是错误的谈谈你可以用C++中的'structs'做的一切.

  • 鉴于`cout`,它似乎更像是`C++'而不是`C`,所以通常指向结构的指针并不总是指向它的第一个成员.(以防万一有人浏览你的链接并且没有注意到差异.) (2认同)