C++ - *p vs&p vs p

Jon*_*Jon 4 c++ pointers

我仍然在努力理解*p,&p和p之间的区别.根据我的理解,*可以被认为是"价值指向",而&作为"地址".换句话说,*在持有地址的同时保留价值.如果这是真的,那么*p和p之间的区别是什么?不是p持有某些东西的价值,就像*p?

per*_*eal 7

*运营商用于间接.间接意味着将值in p解释为内存地址,并加载该地址的值.ppwhile *p的值是存储在指向的内存位置的值p.如果要间接访问整数的值i,可以使用指向它的整数指针(int *p = &i)并使用该指针修改iindirect(*p = 10)的值.


Die*_*Epp 5

这是一张图.

  &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,除非你通过运算符重载做有趣的事情.