Возвращает ли оператор address-of адрес объекта, на который ссылается переменная

Это другой вопрос от этот, как здесь я использую тип объекта structвместо значения 23...,

я читаю эта глава на указатели и говорится следующее:

Адрес переменной можно получить, указав перед именем
переменная со знаком амперсанда (&), известный как адрес оператора. За
пример:

MyStruct* myvar = new MyStruct();
&myvar; // what is this address?

Правильно ли мое понимание того, что это адрес объекта new MyStruct(), а не сама переменная? У меня пока нет хорошего понимания того, как хранятся переменные (а не объекты, на которые они ссылаются), и очень вероятно, что они вообще не используются при компиляции программы.

-1

Решение

Согласно вашему предыдущий вопрос: нет, это не … Это адрес переменной myvar

РЕДАКТИРОВАТЬ

Таким образом, фактические байты нового Struct () хранятся под другим адресом, чем переменная?

new обратный адрес памяти, где «байты» struct выделены.
Ценность myvar будет адрес, где «байты» помещаются в память, и &myvar адрес где переменная myvar помещается в память.

-------------------------------------------------------
|                     M E M O R Y                     |
-------------------------------------------------------
|   --------------                   ---------------  |
|   | myvar = 234| ----points to---> | new MyStruct|  |
|   --------------                   ---------------  |
|   ^                                ^                |
|   |                                |                |
|   address 1 (&myvar)               address 234      |
|                                                     |
-------------------------------------------------------
4

Другие решения

Правильно ли мое понимание того, что это адрес объекта new MyStruct(), а не сама переменная?

Нет это является адрес переменной myvar который был инициализируется с объектом, возвращенным new Struct();,

2

То, что вы получаете в основном копия указателя. Вот как ты можешь доказать это:

int* ptr = new int(2);
int& i = *ptr;
std::cout<<i<<std::endl; //prints 2
ptr = new int(3); //now ptr points to another address
std::cout<<*ptr<<std::endl; //prints 3
std::cout<<i<<std::endl; //still prints 2!

Игнорируя неправильное управление памятью, вы видите, что у вас есть ссылка, которая является копией в область памяти. Если вы измените исходный указатель, он не изменится. Это отвечает на ваш вопрос?

1
По вопросам рекламы [email protected]