C позволяет создать ситуацию, когда несколько указателей ссылаются на один и тот же участок памяти. Вы можете объявить несколько указателей и заставить их все указывать на одну и ту же переменную. Это не просто теоретическая особенность. Такое происходит постоянно в реальном коде.
Рассмотрите следующий фрагмент:
Здесь p получает адрес i. q делает то же самое. Затем r принимает значение p. Поскольку p хранит адрес i, r теперь также указывает на i. Оператор присваивания копирует адрес из правой части в левую. Он не копирует данные. Он копирует местоположение.
После выполнения этих строк переменная i фактически получила псевдонимы. Теперь вы можете обращаться к целому числу i через его оригинальное имя или через любой из указателей.
Переменная i теперь имеет четыре имени: i, *p, *q и *r.
Нет жёсткого ограничения на количество указателей, которые могут хранить один и тот же адрес. Вы можете цепочку указателей углублять настолько, насколько это необходимо. Измените *p, и *r увидит это изменение. Все они смотрят на одну и ту же ячейку памяти.
Любое количество указателей может указывать на один и тот же адрес.
Это поведение является фундаментальным для работы указателей. Это не особый случай. Это поведение по умолчанию. Понимание этого помогает избежать путаницы при отладке. Если вы видите неожиданные значения, проверьте, не изменяют ли несколько указателей одно и то же место. Это не магия. Это просто память.

























