C中的比较运算符返回什么?

时间:2015-09-06 09:13:55

标签: c operators output

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。

2 个答案:

答案 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==35x=50

这实际上是未定义的行为,您可能会在另一台计算机上看到不同的结果。