假设我有一个C ++类,如下所示:
class Point {
// implementing some operations
}
然后:
Point p1;
Point p2 = p1;
如果我想知道p2的地址,那么我可以使用&p2
。但是如何获得p2存储的地址?因为p2不是指针,所以我不能只使用cout << p2;
答案 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);