#include<stdio.h>
int main()
{
int *p,a[]={1,3,5};
p=&a[0];
printf("%d%d%d%d",*p,*p++,(*p)++,*p);
return 0;
}
结果是3211,为什么不是1321
这种大坑还是少碰,你换个编译器可能又变成从左往右执行了
这里从右往左执行,先取a[0],所以是1
然后取(*p)++,就相当于a[0]++,那么数组本身变成了2,3,5,但因为是先取值后++,所以其实取的还是1
然后又取*p++,是指针地址+1不是数值+1,同理先取值后++,此时取得a[0]的值2
最后取得a[1]的值3
3211
这种题没几分,不要跟它较劲,果断放弃才是道理。
printf()从右往左执行
printf 括号里面是从右往左执行,
*p=1
(p)++是先输出p,再p++
*p++=2+1=3
*p=3
这个跟编译环境有关系,不用太在意。在我的环境下就是3,2,1,3