#include<stdio.h>
int main(){
int a=2,*p=&a,*q=&a;
printf("第一行%d %d %d\n",*p++,(*p)++,*q++);//证明*q++是先取*q的值打印,然后指针存储的地址自增,并不会改变a的值
printf("第二行%d\n",a);
p=&a;q=&a;
printf("第三行%d %d %d %d\n",a,*p,(*q)++,a);//证明printf函数运行顺序从右往左
printf("第四行%d %d %d %d\n",a,++(*p),++(*q),a);
printf("第五行%d ",a);
printf("%d ",*(p++));//证明*(p++)和*p++是一样的,都是先取*p的值打印,然后指针存储的地址自增
printf("%d",a);
return 0;
}
输出结果:
结论:
*p++是先取*p的值打印,然后指针p中存储的地址自增。
(*p)++是先取*p的值打印,然后让这个值自增。
*(p++)和*p++是一样的运行顺序。
++*p和++(*p)是一样的,都是先取*p的值,让这个值自增,再打印。
换种说法:
*p++是先取出*p的值打印,然后让p++
(*p)++是先取出*p的值打印,让这个值++
*(P++)是先取出*p的值打印,让p++
++*p和++(*p)都是先取出*p的值,让这个值++,再打印。