main()
{
int k=35;
printf("%d %d %d",k==35,k=50,k>40);
}
这段代码的输出是0 50和0,我不明白为什么?因为我已经了解到赋值运算符的优先级最低,而相关运算符的优先级更高,所以请解释一下这种输出是如何产生的?
没有C标准定义的固定顺序。编译器可以选择从左到右或从右到左进行求值。因此,在您的情况下,编译器从右到左对表达式求值。正如您所知,==
将输出生成为布尔值。因此,编译器所做的第一个评估是35>40
,它是False(0(,而k=50
,所以简单地进行赋值,最后,将k(50(5进行比较,结果是False(0,。
因此,您的输出为0 50 0。
我希望它能消除你的疑虑。。