#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
#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
这种题没几分,不要跟它较劲,果断放弃才是道理。