c - 为什么这个 C 程序打印输出 -1?

标签 c

我正在参加一个练习编程测验,但我不确定为什么这个程序会打印出 -1:

#include <stdio.h>

int main()
{
    int x = 1;

    if (x-- && x-- && x--)
    {
        printf("%d\n", x);
    } else
    {
        printf("%d\n", x);
    }
    return 0;
}

最佳答案

在 C 中,&&|| 等逻辑运算符使用 short-circuit evaluation 求值。 ,这实质上意味着当一个语句被保证为 true 或 false 时,语句中的任何后续表达式都不会被计算。

在您的程序中,只需评估前两个条件即可确定整个语句为假。不计算第三个表达式。

if (x-- &&   /* evaluates true, and then x is decremented */
    x-- &&   /* evaluates false, and then x is decremented */
    x--)     /* this is not executed */

因为这是一系列 AND 语句,从逻辑上讲,只需要一个表达式为假,整个语句就为假。当第二个表达式被确定为假时,没有必要通过评估语句的其余部分来浪费资源,因此执行 else block 。

这导致 x 的最终值为 -1,而不是 -2

关于c - 为什么这个 C 程序打印输出 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262082/

相关文章:

c - Strcmp 生成核心转储

c - 队列初始化功能不起作用

c - 我的循环在多线程中无法正常运行

c - C 语言中 if 与字符串的逻辑条件

c - Pthread 优先级和调度

c++ - WinApi 在每一帧中绘图

c++ - C 读取文件时出错

c++ - 如何在 C++ 中使用 MPI 而不是 C malloc/calloc 动态分配内存?

c - 段错误: double free or corruption (fast top)

c++ - 从一个变量的位到另一个变量的有效映射