运算符【*】的优先级高于运算符【++】
++*p
#include <stdio.h>
int main(void)
{
int a = 1;
int *p = &a;
//前置运算
int b;
b = ++*p; //相当于 a = a + 1 --> a =2 ,b = 2
printf("%d\n", b); // 2,此时a = 2
return 0;
}
(*p)++
#include <stdio.h>
int main(void) {
int a = 1;
int *p = &a;
int b;
b = (*p)++;
printf("%d",b); //output: 1
}
从上面可以看到
*p++
和(*p)++
的效果是一样的
(*p++)重点
#include <stdio.h>
int main(void) {
int a = 1;
int *p = &a;
printf("0x%p\n",p); //输出未自增时指针变量p的地址
//0x000000000061FE10
int b;
b = *(p++); //这里因为是后置运算符
//所以先把*(p)的值赋值给了b
//但是与此同时,也让p的地址加4
printf("%d\n",b);// output:1
printf("0x%p\n",p); //输出指针变量的地址
//0x000000000061FE14
}