gpt4 book ai didi

c - 此函数输出的说明

转载 作者:太空狗 更新时间:2023-10-29 17:27:33 25 4
gpt4 key购买 nike

我正在做一些复习题,问我“下面的输出是什么”,我在理解这个函数的一些事情时遇到了一些困难:

int a = 1, b = 1, c = -1;
c = --a && b++;
printf("%d %d %d", a, b, c);

输出是 010。我的问题是关于第 2 行,c = --a && b++。这条线是如何处理的,它是如何工作/改变值的?如果它是 c = --a || b++?根据我的理解,我认为输出将是 020。

最佳答案

理解结果的关键概念是 short-circuit evaluation bool 运算符(&&||)——如果在评估 bool 运算符的左侧后,右侧的值 不能影响整体结果,那么它不会被评估并且它会产生的任何副作用都不会发生

在第一种情况下,由于 --a 的计算结果为 0 (=false) 的第二部分... && ... 未被评估,因为“false AND anything”将始终为 false。具体来说,b++ 永远不会执行,因此它的值在输出中保持为 1

--a || 的情况下b++,整个表达式的值不能由左边决定(“false OR something”仍然可以为真)所以b++ 评估(并且它的副作用,递增 b,发生)。

要完全理解结果所需的另一个概念是前置和后置递增/递减运算符之间的区别。如果 --++ 出现在变量之前(如在 --a 中),那么变量是首先递减或递增, 值用于评估整个表达式。如果 --++ 出现在变量之后(如在 b++ 中),则 当前 变量的值用于计算表达式,递增/递减发生在这发生之后。

应该注意的是,试图组合 --/++ 同一变量 的两个或多个实例的表达式(例如a+++++a) 很可能调用 undefined behaviour -- 结果可能因平台、编译器、编译器甚至一天中的时间而异。

关于c - 此函数输出的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788257/

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