L.L.569 2021-12-27 15:44 采纳率: 100%
浏览 29
已结题

关于*p++,(*p)++与*p的问题

#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

  • 写回答

4条回答 默认 最新

  • 於黾 2021-12-27 15:56
    关注
    这种大坑还是少碰,你换个编译器可能又变成从左往右执行了
    这里从右往左执行,先取a[0],所以是1
    然后取(*p)++,就相当于a[0]++,那么数组本身变成了2,3,5,但因为是先取值后++,所以其实取的还是1
    然后又取*p++,是指针地址+1不是数值+1,同理先取值后++,此时取得a[0]的值2
    最后取得a[1]的值3
    3211
    
    

    这种题没几分,不要跟它较劲,果断放弃才是道理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月27日
  • 已采纳回答 12月27日
  • 修改了问题 12月27日
  • 创建了问题 12月27日