Изначально p1
хранит адрес x
(который вы получили с помощью &x
).Позже вы установите p1
для хранения нулевого адреса.
В первом фрагменте вы решили напечатать не адрес сохраненный в p1
, а адрес p1
сам .p1
- это переменная, как и любая другая, и, как и остальные, &p1
даст вам адрес этой переменной.Это отличается от значения, хранящегося в нем, которое доступно с помощью p1
и является тем, что печатает второй фрагмент.
Как и любая другая переменная, вы не можете изменить адреспеременная p1
, вы можете изменить только значение, которое она хранит, и в случае указателя это просто так, что значение является адресом.