我正在学习C.我遇到了以下课程 -
#include <stdio.h>
int main() {
int var1 = 2, var2 = 6;
var2 = var2 || var1++ && printf("Computer World");
printf("%d %d\n", var1, var2);
return 0;
}
在Ubuntu 10.10上使用gcc 4.4.5编译后,我得到输出为 -
2 1
我理解'var2'是如何设置为1的。
甚至认为'var1'上有一个递增运算符,为什么当我们看到控制台输出时它不会递增?
答案 0 :(得分:3)
var2 || var1++ && printf("Computer World");
是一个逻辑运算,所以如果var2
是true
(var2不等于零),那么第二个逻辑运算var1++ && printf("Computer World");
将不会执行(它被称为{{3 })。这就是为什么var1
没有增加
尝试以这种方式反转逻辑运算,您将获得var1
递增:
var2 = var1++ && printf("Computer World") || var2;
答案 1 :(得分:0)
在C中,||
是一个快捷运算符,在exp1 || exp2
这样的表达式中,如果可以通过评估exp1
来确定此表达式的真值,{{1不会被评估。
例如,在您的情况下,评估exp2
的结果是var2
,这在C中是正确的,因此表达式的其他部分6
将不会是评价。
您可以查看Shortcut Operators了解更多详情。