2013-09-26 5 views
0

Давайте предположим, этот код:Указатели в C++ разница

int a; 
int * point; 
a = 5; 

point = &a; // <----- 

Линия Я arrowing такая же, как ...

*point = a; 

... или есть разница в этом?

+6

они совершенно разные. – Dave

ответ

3
  • point = &a; делает «точку» точкой «a».
  • *point = a; присваивает значение 'a' независимо от того, что 'точка' уже , указывая на.

«точка» имеет адрес. '&' получает адрес от переменной. point = &a; получает адрес 'a' и присваивает его указателю.

«*» удаляет указатель (получая переменную, на которую указывает), поэтому *point = a присваивает значение «a» разыменованному указателю - то есть, какой бы адрес переменной не был сохранен в указателе.

0

Разница в том, что вы разыскиваете point, который может иметь неправильный адрес в этой точке. На самом деле он не записывал бы значение в point.

2

Совершенно иная.

point = &a; 

означает "point теперь содержит адрес a".

*point = a; 

означает «(в настоящее время не определен) область памяти, которая указывает на point теперь содержит значение a». Эта версия, скорее всего, потерпит крах.

0

Нет, они не то же самое это:

*point = a; 

требует, чтобы point уже указывает на действительной памяти в текущей программе нет, и поэтому было бы неопределенное поведение. в то время как строки:

point = &a; 

будет назначать point адрес существующего объекта.

0

Первая строка присваивает указателю указатель (&a).

Вторая строка присваивает значение a блоку памяти, на который указывает указатель (*pointer).

Примечание. Если указатель не указывает на адрес переменной в области видимости или на динамически распределенный адрес, вы вызываете повреждение памяти во втором случае.

0

На самом деле, это

*point = a; 

может произойти сбой, потому что вы не выделили память, к которой point бы указывая. Он также не указывает на переменную стека - в этом случае она изменит значение этой переменной стека на a.

Другими словами, point не указывает ни на что, и вы пытаетесь установить значение этого не существующего «объекта».

Смежные вопросы