ascend95 2016-04-19 09:21 采纳率: 33.3%
浏览 2464
已采纳

count++的问题,++求解答

#include
int main()
{ int count=0;
printf("%d%d%d\n",count++,count++,count++);
}
为什么结果是210?这个++到底是什么时候执行?
另外我将上面输出语句改成count=count++;然后再输出count,结果是0。。。
感觉好混乱,求真正明白的大神讲解

  • 写回答

6条回答 默认 最新

  • 小灸舞 2016-04-19 11:30
    关注

    首先,这个问题并没有一个标准的答案,依赖于编译器,不同的编译器结果很可能不同
    但一般来说有一点是一样的,那就是printf压栈顺序是从右往左,然后根据第一个参数的format里的占位符依次弹栈,匹配占位符进行输出
    不用刻意去研究为什么会得到这个结果,只要记住不要在一个表达式对同一个变量多次++,这是一个未定义的行为
    如果楼主选定一个编译器了,那么可以继续问,不然没有太大研究的必要
    同时,楼主你试试printf("%d%d%d\n",count++,count++,++count);打印结果是不是出乎你意料了
    哈哈,这里的前++和后++不仅涉及到了是先计算后加1还是先加1再参与计算,还涉及到了有的编译器会将前++会将引用压栈,而有的编译器却不会
    PS:后++和前++的区别楼主应该是搞得清楚的吧。。。楼上的反正也解释的很清楚
    也可以参考:http://bbs.csdn.net/topics/370153775

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

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?