与增量运算符的使用混淆

时间:2014-01-03 07:37:31

标签: c linux

我正在学习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'上有一个递增运算符,为什么当我们看到控制台输出时它不会递增?

2 个答案:

答案 0 :(得分:3)

var2 || var1++ && printf("Computer World");

是一个逻辑运算,所以如果var2true(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了解更多详情。