“&”和“ * ”的运算优先级别相同,按自右向左的方向结合。因此“&p”先进行“ * ”运算,“p”相当于变量a;再进行“&”运算,“&p”就相当于取变量a的地址。“&a”先进行“&”运算,“&a”就是取变量a的地址,然后执行“”运算,“&a”就相当于取变量a所在地址的值,实际就是变量a。
#include<stdio.h>
#include<stdlib.h>
/* &*和*&的区别 */
/* written by Chen Gengru */
/* updated on 2019-1-1 */
void main()
{
int a;
int *p;
p = &a;
scanf("%d", p);
printf("&*p = %d\n", &*p);
printf("*&a = %d\n", *&a);
}
结果: