Вот диаграмма.
&p=0xcafebabe p=0xfeedbeef *p=0xdeadbeef <-- memory address
+--------------+ +---------------+ +----------------+
| p=0xfeedbeef | -> | *p=0xdeadbeef | -> | **p=0x01234567 | <-- memory contents
+--------------+ +---------------+ +----------------+
Итак, &p
- это адрес p
, то есть 0xcafebabe
.В ячейке памяти 0xcafebabe
хранится значение p, p
, которое равно 0xfeedbeef
.Это также адрес *p
.
Так повторяйте за мной: значение p
является адресом *p
.
И значение &p
равноадрес p
.
А, значение *p
является адресом **p
.
и т. д. и т. п.Так что *
и &
похожи на противоположности и *&p == p == &*p
, если только вы не делаете смешные вещи с перегрузкой оператора.