Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我想知道这个程序的输出是3 3 = 3
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我想知道这个程序的输出是3 3 = 3
#include<stdio.h>
#include<conio.h>
main()
{
int a=2,b=3;
printf("%d %d=%d",a,b,a=b);
getch();
}
最佳答案
函数参数的求值顺序不确定-无法保证从左至右,从右至左或任何其他顺序求值,因此不能保证a
或b
之前先求值a=b
。
但是,您调用了未定义的行为,因为您试图读取和修改a
的值而没有中间的顺序点;由于未指定评估顺序,因此对于不同的平台,编译器,程序,优化设置等,结果将有所不同。未定义的行为仅意味着不需要编译器以任何特定方式处理这种情况,因此任何结果都是就语言而言,可能是正确的。
关于c - 无法理解程序的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23346677/
10-13 05:44