0

#include<stdio.h>

int main()

{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}

如果我使用 ||,k 的值会增加 运算符,但如果 && 值没有增加,那是什么原因,我很困惑。

输出为 -2,3,0,1

4

6 回答 6

4

您的代码中有一个测试:

m = ++i && ++j || ++k;

当您像这样使用多个测试时,您将首先评估++i && ++j. 如果它是真的,你永远不会评估这个|| ++k部分(因为m无论如何都是真的)。这称为惰性求值

如果++i && ++j在您的示例中为假,k则会增加,因为测试的最后一部分将被评估。

于 2012-11-02T09:06:00.707 回答
2

它被称为惰性评估。无论 b 是什么,假 && b 总是假的。

在您的情况下:
m = ++i && ++j || ++k;评估由于懒惰m = true || ++k;而导致不被评估。++k

于 2012-11-02T09:04:23.583 回答
2

因为++k不评估为++i && ++j评估为真。

于 2012-11-02T09:04:46.653 回答
2

如果“&&”的运算符不为零,则为真,则其余部分不使用。在c中,如果不为零,则为真。

于 2012-11-02T09:54:44.233 回答
1

OR 条件是惰性求值的。

永远不会执行,因为条件的++k第一部分不正确。

于 2012-11-02T09:04:55.227 回答
1

||当它之前的值评估为 true之后的表达式将不会被评估。

(c=10)|| (y=20)

在此示例中,c=10计算结果为true,因此y=20不会被计算。

于 2012-11-02T09:05:59.040 回答