假设我具有以下层次结构:

class A
{
 public:
 A()
 private:
 int aa;
}

class B: public A
{
 public:
 B()
 private:
 int bb;
}

class D: public B
{
 public:
 D()
 private:
 int dd;
}


当我在主代码中键入以下代码时:

D dobj;
std::cout<<"Address of D object: "<<&dobj<<std::endl;

A aobj = static_cast<A>(dobj);
A* aptr = static_cast<A*>(&dobj);

std::cout<<"Address of D object: "<<&dobj<<std::endl;
std::cout<<"Address of aptr object: "<<&aptr<<std::endl;
std::cout<<"Address of A object: "<<&aobj<<std::endl;


输出为:

Address of dobj object: 0012FF0C
Address of dobj object: 0012FF0C
Address of aptr object: 0012FF18
Address of aobj object: 0012FF14


为什么aptr和aobj的地址不同?他们不应该是一样的吗?

为什么dobj和aptr的地址不同?他们不应该也一样吗?

我正在使用VC ++在Windows上进行编译。

谢谢,
德科斯托。

最佳答案

为什么aptr&aobj不同?


首先,您要打印出错误的指针:&aptr是“ aptr的地址”,而不是“ aptr指向的对象的地址”。您只需要打印aptr即可打印“ aptr指向的对象的地址”,这大概就是您真正想要做的。

aptr是指向Adobj部分的指针。 aobjAdobj部分的副本。

aptr&aobj不同,因为它们是不同对象的地址。

09-08 10:03