`*&p` 与 `&*p` 之间的区别?

gbo*_*box 0 c pointers

int a=10;
int *p=&a;
Run Code Online (Sandbox Code Playgroud)

现在看&*p我们首先看*p哪个是10,然后看&10 哪个是地址10或地址a

在这种情况下,*&p我们首先查看地址p,然后查看该地址中的值,即10

但我明白这两个*&pvs&*p是一样的,为什么呢?

Som*_*ude 5

让我们画出你的变量:

+---+ +---+
| p| --> | 一个 |
+---+ +---+

也就是说,p指向a

现在,如果您&*p这样做,那么您首先取消p对 get 的引用a,然后您将获得 的地址a,这将为您留下一个指向 的指针a

如果我们获取 的*&p地址来获取p指向的指针p,那么您可以取消引用该指针来获取p。这是一个指向a.

因此,虽然表达式执行不同的操作,但最终结果是相同的:指向 的指针a

下降编译器可能什么都不做,因为解引用运算符*和地址运算符&一起总是会相互抵消,无论它们的顺序如何。