首页 > 其他 > 详细

解释int a=9;printf("%d,%d",a,a++)?输出情况

时间:2015-06-22 17:54:24      阅读:207      评论:0      收藏:0      [点我收藏+]

结论取自知乎前辈:

任何在同一个表达式内多次使用++/--的C语言题目都无助于你学习C语言。

这种行为是未定义的行为,换句话说,结果是多少是不确定的。不要过分去研究这类题目,没有意义。同时正确的代码里也不应该有这种不确定结果的表达式出现,在项目代码里,一般来说都严格禁止这样使用。

下面解释原因:

首先,printf的入栈顺序是从右到左,任何一个标准库的printf都是这样的,否则printf无法在栈顶取到最左边的第一个参数。

那么,你的这个题目的一种可能的运行状态是:

1.a的值,入栈(右边第一个参数),此时a的值是92.a执行++操作;
3.a的值,入栈(右边第二个参数),此时a的值是104. 参数"%d,%d"(指针),入栈;
5. 调用printf

所以输出的结果就是10,9

但以上只是一种可能的运行状态。

也可能是下面这种:

1.a的值,入栈(右边第一个参数);
2.a的值,入栈(右边第二个参数);
3. 参数"%d,%d"(指针),入栈;
4.a执行++操作;
5. 调用printf

因为编译器可能优化代码,如果是这种情况,那么输出结果就是9,9

因为C标准里没有规定具体++执行的时间点在哪,所以这种问题没有标准答案。

再说一句,实际项目工程代码里,禁止用这种有歧义的写法。

解释int a=9;printf("%d,%d",a,a++)?输出情况

原文:http://blog.csdn.net/xd_122/article/details/46594139

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!