C ++ Технический вопрос по разыменованию указателей - PullRequest
1 голос
/ 13 февраля 2020

Мы недавно выучили указатели в моем классе колледжа c ++, и у меня просто возник технический вопрос, потому что когда я говорю об указателях, я хочу убедиться, что то, что я говорю, имеет смысл.

Таким образом, указатель хранит адрес памяти для чего-то вроде переменной или объекта. Но когда вы разыменовываете эту переменную для редактирования значения AT по этому адресу, за кадром происходит то, что действительно осуществляется доступ и редактирование значения, хранящегося в ОЗУ в этом месте, или это доступ к переменной из этого места в памяти, а затем просто изменение ее значения , Или это одно и то же? Я надеюсь, что это имеет смысл.

Другими словами, имело бы ли смысл говорить «Редактирование разыменованного указателя изменяет значение в этой ячейке памяти» или «Редактирование разыменованного указателя изменяет переменную, связанную с этим местоположением» , Или я просто переосмыслил это, и эти операторы на самом деле одно и то же, потому что редактирование значения в этой ячейке памяти также изменяет переменную одновременно, потому что именно так переменная получает данные?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Может быть, это просто проблема терминологии. Не будучи слишком педантичным c, стандартная терминология такова:

  • Объект - это объект, которому назначена область хранения, и в этой области хранится значение. Объект может иметь или не иметь имя,
  • Переменная является либо объектом, который был объявлен с именем, либо ссылкой с именем.

В своем вопросе вы изменяете значение объекта, записывая новое значение в его область хранения.

Выражение вида *p имеет ту же категорию, что и имя объекта (термин для этого lvalue ), оно обозначает область хранения объекта и может использоваться для чтения или записи этой области.

1 голос
/ 13 февраля 2020

В этом коде:

int *p = new int;
*p = 5;

значение, на которое указывает p, не имеет имени. Там нет «переменной», просто место в памяти. Поэтому, вероятно, лучше просто сказать «значение в этом месте было установлено на 5».

...