我有這段代碼:爲什麼指向同一對象的指針具有不同的值?
#include <iostream>
class A
{
public:
A() : m_i(0) { }
protected:
int m_i;
};
class B
{
public:
B() : m_d(0.0) { }
protected:
double m_d;
};
class C : public A, public B
{
public:
C() : m_c('a') { }
private:
char m_c;
};
int main()
{
C d;
A *b1 = &d;
B *b2 = &d;
std::cout << (long)b1 << std::endl <<(long)b2<< std::endl;
}
當編譯並運行它產生以下輸出:
140734705182320
140734705182328
它並不完全清楚爲什麼不同的指針指向同一個地址(& d)有不同的價值。
在此先感謝。
因爲他們*不*指向同一個對象。 'b1'指向'A'對象,'b2'指向'B'對象。兩個類都不是另一個的子類型,所以都不能指向另一個的子對象。 – delnan
指針確實有不同的地址,但這不是你的程序演示的內容。這表明他們*存儲了不同的地址。 –
您應該將指針值轉換爲'void *',而不是'long',用於打印。 –