C语言中的“表达”是什么意思?

时间:2012-09-27 18:43:54

标签: c

我已经参与了C编程很长一段时间了。 几天前,我偶然发现了错误编写的代码,这让我想到了以下问题。

以下C代码打印出来的内容。

if (0,2)  
    printf("red");

6 个答案:

答案 0 :(得分:9)

代码的输出将是:

red

if语句的条件使用逗号运算符,它计算第二个操作数的结果,在本例中为: 2 。由于C中的非零类似于 true ,因此表达式为 true printf执行。

使用逗号运算符,计算第一个操作数并丢弃结果,然后计算第二个操作数,表达式的结果和类型是第二个操作数的计算结果和类型。阅读有关逗号运算符at wikipedia的更多信息。

答案 1 :(得分:5)

would print red,与

不同
if (2,0)
    printf("red")

什么都不打印。

这是C中the comma operator的工作方式 - 它逐个评估其操作数,并将最后一个的结果作为整体结果。

答案 2 :(得分:1)

if语句中,如果控制表达式不为零,则执行该语句。

0, 2是一个逗号表达式,它的结果是右边的操作数2不等于零。

所以if表达式中的语句:

printf("red");

将在您的示例中执行。

答案 3 :(得分:1)

在您提供的上下文中,逗号运算符是无用的。

if (0,2)
   printf("red"); 

在这种情况下,它说:

Do nothing with 0
if (2)  //which is true
print "red"

基本上除非你想让最后一个值之前的对象有意义,否则它对你没有任何作用。一个略微更有用的例子,说明你为什么要这样做:

int i, j;
int arr[4] = {1,2,3,4};
for(i=0, j=1; i<4; j+=2, i+=2){
    printf("arr[%d] = %d\n", i, arr[i]);
    printf("arr[%d] = %d\n", j, arr[j]);
}

现在这个循环只有2次迭代,我们打印出数组中的所有4个值:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4

它的工作原理与两个以上的操作相同,所以如果你想要,你可以这样做:

if(a++, b++, 1)
  printf("red");

现在,在打印“红色”

时,您将获得a和b递增

答案 4 :(得分:0)

它将打印red,因为comma operator计算第一个操作数并丢弃结果,然后计算第二个操作数并返回结果,因此它返回2,这是TRUE值因此进入IF块。

答案 5 :(得分:0)

回答标题中的问题(来自C 2011 online draft):

6.5表达式

1 表达式是一系列运算符和操作数,用于指定a的计算 值,或指定对象或功能,或产生副作用,或 执行它们的组合。运算符操作数的值计算 在运算符结果的值计算之前排序。

在摘录

if (0,2)
    printf("red");

0,2逗号表达式;每个子表达式02都是从左到右进行计算,逗号表达式的值是最右边的子表达式的值(在本例中为2)。由于0,2的结果不为零,因此将执行分支并执行printf语句。

请注意,逗号运算符与用于分隔函数中的参数的逗号不同:

foo(a, b, c);

在这种情况下,a, b, c参数列表,而不是逗号表达式。没有特定的评估顺序(ca之前可能会评估b)并且没有结果值。