顺便说一下
&是取地址符,他在最前面,输出来的就是地址
*是返回地址所在元素符,他在前面,一般输出的是元素(除非他是指向指针的指针)
然后你问题里的就好回答了
由于&、*是同级运算符,遵循从右往左的运算顺序
*&p是指,先取p的地址,然后回到&p所在的元素
&*p是指,先回到p所在地址的元素,然后取该元素的地址(其实就是p)
例如:
(1)
p=100;
&p=100048;(假设这是p的地址)
*&p=100;(*是取上面那个地址所在的变量)
(2)
p=100048;(此时的p必须是一个地址)
*p=100;(取地址所在变量)
&*p=100048;(&取地址符,又取到了上面那个元素的地址)
*&p 等价于*(&p)
&*p 等价于&(*p)
举个例子:
p是int变量,那么*&p = p,而&*p是非法的。因为*p非法
p是int *指针变量,那么*&p = p,&*p = p,都是p。
*&p 对指针自己本身的地址上的内存进行访问(也就是指针所指向的地址)。
&*p 对指针所指向的地址的内存进行取值之后访问该内存的地址。
具体我不记得哈,你要区分这个,就得看C语言中的 优先级+结合顺序。
百度或者书上都有这个附表的。然后按照次序用括号一扩,你就知道是怎么回事了