在C ++中获取类对象的地址?

时间:2011-05-16 00:16:28

标签: c++ memory-address

假设我有一个C ++类,如下所示:

class Point {
// implementing some operations
}

然后:

Point p1;
Point p2 = p1;

如果我想知道p2的地址,那么我可以使用&p2。但是如何获得p2存储的地址?因为p2不是指针,所以我不能只使用cout << p2;

3 个答案:

答案 0 :(得分:13)

以下内容有什么问题:

cout << &p2;

如你所说,p2不是指针。从概念上讲,它是存储在内存中的数据块。 &p2是此块的地址。当你这样做时:

Point p2 = p1;

...数据被复制到标有'p1的块。

  

但是如何获得p2存储的地址?

除非您将指针成员添加到Point数据结构,否则它不会存储地址。正如你所说,它不是一个指针。

P.S。 hex流运算符也可能有用:

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

答案 1 :(得分:2)

通过

Point p2 = p1;

你只需将p2的值复制到p1(最有可能)。记忆是独立的。 如果你这样做了:

Point* p2 = &p1;

然后p2将成为指向p1的指针(打印它的值将为您提供内存块的开头,然后您可以尝试使用sizeof来获取块的大小)。

答案 2 :(得分:0)

已接受的答案建议使用运算符 & 来获取对象的地址。

从 C++11 开始,如果对象类定义/重载运算符 &,则此解决方案不起作用。

为了获取对象的地址,从 C++11 开始,应该使用模板函数 std::addressof()

Point p1;
Point* p2 = std::addressof(p1);

http://www.cplusplus.com/reference/memory/addressof/