Может быть сложно понять указатели.
Предположим, что на Великой улице № 234 есть дом. Об этом доме никто не знает.
Теперь человеку А, который живет в другом месте, рассказывают об этом доме. Информация - это просто адрес дома. В информации есть плюс: там написано «это дом, ничего другого».
То же самое и с указателями.
int *p;
p = new int[5];
int *p
- это человек А. В этот момент он ничего не знает, кроме того, что последний будет проинформирован о доме. То, что это связано с домом, а не с автомобилем, связано с int
. Вместо этого автомобиль будет float
.
int[5]
- это дом, только что построенный в результате действия new
. Эта команда new
не только создает массив, но также возвращает адрес, это "GreatStreet no 234" (или его эквивалент в позиции кучи).
p= new...
сообщает человеку A адрес дом.
С указателями хорошо то, что вы можете работать не только с «человеком А» (по p
), но и с его информацией о доме (по звездочке в *p
).
Итак, вы можете сменить дом, если воспользуетесь методом звездочки (разыменование) *p = 3
. Но вы не можете изменить адрес дома.
Если вы измените информацию указателя p= ...
без звездочки, вы измените адрес на другой дом.