Это другой вопрос от этот, как здесь я использую тип объекта struct
вместо значения 23...
,
я читаю эта глава на указатели и говорится следующее:
Адрес переменной можно получить, указав перед именем
переменная со знаком амперсанда (&), известный как адрес оператора. За
пример:
MyStruct* myvar = new MyStruct();
&myvar; // what is this address?
Правильно ли мое понимание того, что это адрес объекта new MyStruct()
, а не сама переменная? У меня пока нет хорошего понимания того, как хранятся переменные (а не объекты, на которые они ссылаются), и очень вероятно, что они вообще не используются при компиляции программы.
Согласно вашему предыдущий вопрос: нет, это не … Это адрес переменной myvar
…
РЕДАКТИРОВАТЬ
Таким образом, фактические байты нового Struct () хранятся под другим адресом, чем переменная?
new
обратный адрес памяти, где «байты» struct
выделены.
Ценность myvar
будет адрес, где «байты» помещаются в память, и &myvar
адрес где переменная myvar
помещается в память.
-------------------------------------------------------
| M E M O R Y |
-------------------------------------------------------
| -------------- --------------- |
| | myvar = 234| ----points to---> | new MyStruct| |
| -------------- --------------- |
| ^ ^ |
| | | |
| address 1 (&myvar) address 234 |
| |
-------------------------------------------------------
Правильно ли мое понимание того, что это адрес объекта
new MyStruct()
, а не сама переменная?
Нет это является адрес переменной myvar
который был инициализируется с объектом, возвращенным new Struct();
,
То, что вы получаете в основном копия указателя. Вот как ты можешь доказать это:
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!
Игнорируя неправильное управление памятью, вы видите, что у вас есть ссылка, которая является копией в область памяти. Если вы измените исходный указатель, он не изменится. Это отвечает на ваш вопрос?