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条)

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后的密码
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面