在下列情况下,每个成员都有不同的名称或实体,为什么他们的地址相同?
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)
因为指向结构的指针总是指向它的第一个成员(因为结构是按顺序排列的).
(C1x§6.7.2.1.13:"指向结构对象的指针,适当转换,指向其初始成员......反之亦然.在结构对象中可能有未命名的填充,但不在其开头.")
注意: mange指出,理所当然,如果你开始向你的结构中添加虚函数,C++通过在结构的开头添加vtable来实现这个...这使得我的语句(对于C来说是真的)在你的时候是错误的谈谈你可以用C++中的'structs'做的一切.