int main()
{
int x=35;
printf("%d\n%d\n%d\n",x==35,x=50,x>35);
return 0;
}
在上面的main函数中,输出结果为0 50 0.为什么即使x
的值等于35,比较运算符也会产生0的输出。
我对x>35
生成的输出感到有点困惑,因为在编译它时x
的值已更新为50,而不是为什么它会产生0而不是1。
答案 0 :(得分:3)
x = 50是赋值,显然,参数按相反顺序计算:
所以x>首先将35评估为假(0),然后将x = 50评估为分配,其评估为50作为副作用,然后x == 35再次为假(0)。
(事实上,正如其他答案所说,未指定此执行顺序。
答案 1 :(得分:3)
printf("%d\n%d\n%d\n",x==35,x=50,x>35);
未指定首先评估x==35
或x=50
。
这实际上是未定义的行为,您可能会在另一台计算机上看到不同的结果。