c语言 - 为什么变量本身不递增?



我在这里很难理解这段代码。我的问题是为什么后增量不适用于变量 j?似乎该行从未执行过,最终打印 0 0 而不是 0 1?

#include <stdio.h>
int main() {
int i = 0, j = 0;
(i == 0) || j++;
printf("%d %d", i, j);
}

如果有人向我解释我错在哪里,我将不胜感激,谢谢!

如果第一个操作数(子表达式(产生 true,则不计算逻辑 OR 运算符的第二个操作数。

在此表达式中

(i == 0) || j++;

i == 0为 true,因此不计算第二个操作数j++

如果你会像

(i == 0) && j++;

然后计算第二个操作数(子表达式(。

来自 C 标准(6.5.13 逻辑 AND 运算符(

4 与按位二进制 & 运算符不同,&&&运算符保证 从左到右的评估;如果计算第二个操作数,则 第一个和第二个评估之间的序列点 操作。如果第一个操作数比较等于 0,则第二个操作数 不进行评估。

和(6.5.14 逻辑 OR 运算符(

4 与按位 | 运算符不同,|| 运算符保证 从左到右的评估;如果计算第二个操作数,则 第一个和第二个评估之间的序列点 操作。如果第一个操作数比较不等于 0,则第二个操作数 不计算操作数。

(i == 0)计算结果为1,因此||的结果是1。在这种情况下,它不会执行j++。例如,如果改为(i == 1) || j++;,那么j就会增加。

这里对此进行了解释:

评估lhs后有一个序列点。如果结果 的 LHS 比较不等于零,则根本不评估 RHS (所谓的短路评估(

相关内容

  • 没有找到相关文章

最新更新