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

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程