Давайте предположим, этот код:Указатели в C++ разница
int a;
int * point;
a = 5;
point = &a; // <-----
Линия Я arrowing такая же, как ...
*point = a;
... или есть разница в этом?
Давайте предположим, этот код:Указатели в C++ разница
int a;
int * point;
a = 5;
point = &a; // <-----
Линия Я arrowing такая же, как ...
*point = a;
... или есть разница в этом?
point = &a;
делает «точку» точкой «a».*point = a;
присваивает значение 'a' независимо от того, что 'точка' уже , указывая на.«точка» имеет адрес. '&' получает адрес от переменной. point = &a;
получает адрес 'a' и присваивает его указателю.
«*» удаляет указатель (получая переменную, на которую указывает), поэтому *point = a
присваивает значение «a» разыменованному указателю - то есть, какой бы адрес переменной не был сохранен в указателе.
Разница в том, что вы разыскиваете point
, который может иметь неправильный адрес в этой точке. На самом деле он не записывал бы значение в point
.
Совершенно иная.
point = &a;
означает "point
теперь содержит адрес a
".
*point = a;
означает «(в настоящее время не определен) область памяти, которая указывает на point
теперь содержит значение a
». Эта версия, скорее всего, потерпит крах.
Нет, они не то же самое это:
*point = a;
требует, чтобы point
уже указывает на действительной памяти в текущей программе нет, и поэтому было бы неопределенное поведение. в то время как строки:
point = &a;
будет назначать point
адрес существующего объекта.
Первая строка присваивает указателю указатель (&a
).
Вторая строка присваивает значение a блоку памяти, на который указывает указатель (*pointer
).
Примечание. Если указатель не указывает на адрес переменной в области видимости или на динамически распределенный адрес, вы вызываете повреждение памяти во втором случае.
На самом деле, это
*point = a;
может произойти сбой, потому что вы не выделили память, к которой point
бы указывая. Он также не указывает на переменную стека - в этом случае она изменит значение этой переменной стека на a
.
Другими словами, point
не указывает ни на что, и вы пытаетесь установить значение этого не существующего «объекта».
они совершенно разные. – Dave