标签:c语言
结论取自知乎前辈:
任何在同一个表达式内多次使用++/--的C语言题目都无助于你学习C语言。
这种行为是未定义的行为,换句话说,结果是多少是不确定的。不要过分去研究这类题目,没有意义。同时正确的代码里也不应该有这种不确定结果的表达式出现,在项目代码里,一般来说都严格禁止这样使用。
下面解释原因:
首先,printf的入栈顺序是从右到左,任何一个标准库的printf都是这样的,否则printf无法在栈顶取到最左边的第一个参数。
那么,你的这个题目的一种可能的运行状态是:
1. 取a的值,入栈(右边第一个参数),此时a的值是9;
2. 给a执行++操作;
3. 取a的值,入栈(右边第二个参数),此时a的值是10;
4. 参数"%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++)?输出情况
标签:c语言
原文地址:http://blog.csdn.net/xd_122/article/details/46594139