【问题标题】:What does comparison operator in C return?C中的比较运算符返回什么?
【发布时间】:2015-09-06 09:13:54
【问题描述】:
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 的输出。

我对@9​​87654324@ 产生的输出也有点困惑,因为编译时x 的值已更新为 50,而不是为什么它会产生 0 而不是 1 的输出。

【问题讨论】:

标签: c operators output


【解决方案1】:

x = 50 是赋值,显然,参数是按相反的顺序计算的:

所以 x > 35 首先被评估为 false (0),然后 x=50 作为赋值,其评估为 50 作为副作用,然后 x == 35 再次为 false (0)。

(确实,就像其他答案所说,这个执行顺序没有指定。

【讨论】:

  • 这实际上是未定义的行为。读取和写入同一个变量,中间没有序列点。
【解决方案2】:
printf("%d\n%d\n%d\n",x==35,x=50,x>35);

不确定是先评估x==35 还是x=50

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

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多