Получить адрес объекта класса в C ++? - PullRequest
1 голос
/ 16 мая 2011

Предположим, у меня есть класс C ++ следующим образом:

class Point {
// implementing some operations
}

Тогда:

Point p1;
Point p2 = p1;

Если я хочу узнать адрес p2, тогда я могу использовать &p2.Но как я могу получить адрес, который хранит p2?Поскольку p2 не указатель, поэтому я не могу просто использовать cout << p2;

Ответы [ 2 ]

13 голосов
/ 16 мая 2011

Что не так со следующим:

cout << &p2;

Как вы говорите, p2 не указатель. Концептуально это блок данных, хранящихся где-то в памяти. &p2 - адрес этого блока. Когда вы делаете:

Point p2 = p1;

... эти данные копируются в блок с меткой p1.

Но как я могу получить адрес, который хранит p2?

Если вы не добавите указатель в структуру данных Point, он не сохранит адрес. Как вы сказали, это не указатель.

P.S. Оператор потока hex также может быть полезен:

cout << hex << &p2 << endl;
2 голосов
/ 16 мая 2011

Делая

Point p2 = p1;

вы просто копируете значения p2 в p1 (скорее всего). Память независима. Если вы сделали вместо этого:

Point* p2 = &p1;

тогда p2 будет указателем на p1 (печать его значения даст вам начало блока памяти, затем вы можете попробовать sizeof, чтобы получить размер блока).

...