假設我有一個C++類,如下所示:獲取C++中類的對象的地址?
class Point {
// implementing some operations
}
然後:
Point p1;
Point p2 = p1;
如果我想知道P2的地址,然後我可以使用&p2
。但是,我怎樣才能得到p2存儲的地址?因爲P2不是指針,所以我不能只用cout << p2;
假設我有一個C++類,如下所示:獲取C++中類的對象的地址?
class Point {
// implementing some operations
}
然後:
Point p1;
Point p2 = p1;
如果我想知道P2的地址,然後我可以使用&p2
。但是,我怎樣才能得到p2存儲的地址?因爲P2不是指針,所以我不能只用cout << p2;
這有什麼錯
cout << &p2;
?
正如你所說,p2
不是一個指針。從概念上講,它是存儲在某個地方的數據塊。 &p2
是此塊的地址。當你這樣做時:
Point p2 = p1;
......數據被複制到塊'標記'p1
。
但我怎樣才能得到p2存儲的地址?
除非您將指針成員添加到Point
數據結構中,否則它不會存儲地址。正如你所說,這不是一個指針。
(PS的 '十六進制' 流運算符可能是太有用:
cout << hex << &p2 << endl;
)
[請注意,如果對象實際上是'char'](http://stackoverflow.com/questions/5657123/how-to-simulate-printfs-p-format-when-using-stdcout/5657144#5657144)。 – Xeo 2011-05-16 00:22:42
這樣做
Point p2 = p1;
您只需P2的值複製到P1(最有可能)。內存是獨立的。 如果你做,而不是:
Point* p2 = &p1;
則P2將是一個指針到P1(打印它的價值將會給你的內存塊的開頭,然後你可以嘗試的sizeof來獲得塊的大小)。
嗨,哈倫。 「將p2的值複製到p1上」應該是相反的方式。指針的一個很好的例子,但應該是'sizeof'(無下劃線),無論如何,您可以使用sizeof(Point)或sizeof p1以及sizeof * p2來獲取指針版本的對象大小它們。乾杯。 – 2011-05-16 03:17:20
呵呵? p2不存儲地址,因爲它不是指針。它存儲用戶定義的數據(它是成員變量)。 – 2011-05-16 00:25:55