2011-05-16 60 views
1

假設我有一個C++類,如下所示:獲取C++中類的對象的地址?

class Point { 
// implementing some operations 
} 

然後:

Point p1; 
Point p2 = p1; 

如果我想知道P2的地址,然後我可以使用&p2。但是,我怎樣才能得到p2存儲的地址?因爲P2不是指針,所以我不能只用cout << p2;

+1

呵呵? p2不存儲地址,因爲它不是指針。它存儲用戶定義的數據(它是成員變量)。 – 2011-05-16 00:25:55

回答

12

這有什麼錯

cout << &p2; 

正如你所說,p2不是一個指針。從概念上講,它是存儲在某個地方的數據塊。 &p2是此塊的地址。當你這樣做時:

Point p2 = p1; 

......數據被複制到塊'標記'p1

但我怎樣才能得到p2存儲的地址?

除非您將指針成員添加到Point數據結構中,否則它不會存儲地址。正如你所說,這不是一個指針。

(PS的 '十六進制' 流運算符可能是太有用:

cout << hex << &p2 << endl; 

+1

[請注意,如果對象實際上是'char'](http://stackoverflow.com/questions/5657123/how-to-simulate-printfs-p-format-when-using-stdcout/5657144#5657144)。 – Xeo 2011-05-16 00:22:42

2

這樣做

Point p2 = p1; 

您只需P2的值複製到P1(最有可能)。內存是獨立的。 如果你做,而不是:

Point* p2 = &p1; 

則P2將是一個指針到P1(打印它的價值將會給你的內存塊的開頭,然後你可以嘗試的sizeof來獲得塊的大小)。

+1

嗨,哈倫。 「將p2的值複製到p1上」應該是相反的方式。指針的一個很好的例子,但應該是'sizeof'(無下劃線),無論如何,您可以使用sizeof(Point)或sizeof p1以及sizeof * p2來獲取指針版本的對象大小它們。乾杯。 – 2011-05-16 03:17:20