我仍然在努力理解*p,&p和p之间的区别.根据我的理解,*可以被认为是"价值指向",而&作为"地址".换句话说,*在持有地址的同时保留价值.如果这是真的,那么*p和p之间的区别是什么?不是p持有某些东西的价值,就像*p?
该*运营商用于间接.间接意味着将值in p解释为内存地址,并加载该地址的值.p是pwhile *p的值是存储在指向的内存位置的值p.如果要间接访问整数的值i,可以使用指向它的整数指针(int *p = &i)并使用该指针修改iindirect(*p = 10)的值.
这是一张图.
&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,除非你通过运算符重载做有趣的事情.