gpt4 book ai didi

c - 为什么前两个变量 (a, b) 是预递增的,而第三个变量不是 (c)?

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:52 25 4
gpt4 key购买 nike

我遇到了一个我无法理解的问题。 a 的输出是 6,b 是 -6,但无论我用什么变量初始化它,c 都保持不变。

#include <stdio.h>
void main()
{
int a = 5, b = -7, c = 0, d;
d = ++a && ++b || ++c;
printf("\n%d%d%d%d", a, b, c, d);
}

谢谢。

最佳答案

这是短路行为,是 C 语言故意设计的部分。

当 C 找到以下形式的表达式时:

(expression A) || (expression B)

并且表达式 A 被评估为 TRUE,表达式 B 是什么并不重要!
它可以是 TRUE,或者 FALSE,但由于 ||,整个表达式仍将为 TRUE

因此,C 语言甚至不会计算后半部分:表达式 B。该部分被跳过,因此 ++c 被跳过并且永远不会被计算。


只是为了好玩,如果你想改变这个程序使 ++c 确实发生,设置 b 等于 -1,这样当你有 ++b 时,它就变成了 0 (false)

int a = 5, b = -1, c = 0, d;

现在,表达式将以这种方式求值:

d = (6 && 0) || [ lazy, short-circuit evaluation ];
d = 0 || [ second expression is now required! ];
d = 0 || 1;
d = 1;

输出:

6011

关于c - 为什么前两个变量 (a, b) 是预递增的,而第三个变量不是 (c)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com