理解逗号运算符

时间:2015-12-08 11:23:22

标签: c comma-operator

int main()
{
    int a = (1,2,3);
    int b = (++a, ++a, ++a);
    int c= (b++, b++, b++);
    printf("%d %d %d", a,b,c);
}

我是编程初学者。我没有得到这个程序如何显示6 9 8的输出。

3 个答案:

答案 0 :(得分:8)

所有三个声明中使用的,

int a = (1,2,3);
int b = (++a, ++a, ++a);
int c = (b++, b++, b++);  

comma operator。它计算第一个操作数 1 并丢弃它,然后计算第二个操作数并返回其值。因此,

int a = ((1,2), 3);          // a is initialized with 3.
int b = ((++a, ++a), ++a);   // b is initialized with 4+1+1 = 6. 
                             // a is 6 by the end of the statement
int c = ((b++, b++), b++);   // c is initialized with 6+1+1 = 8
                             // b is 9 by the end of the statement.

1如果是逗号运算符,则从左到右保证评估顺序。

答案 1 :(得分:5)

代码没有任何好处,没有正确思想的人会写出来。你不应该花时间查看那种代码,但我仍会给出解释。

逗号运算符,表示"执行左运算符,丢弃任何结果,执行正确运算符并返回结果。将部件放在括号中对功能没有任何影响。

写得更清楚代码是:

int a, b, c;

a = 3; // 1 and 2 have no meaning whatsoever

a++;
a++;
a++;
b = a;

b++;
b++;
c = b;
b++;

增量前和增量后算子在行为方式上存在差异,导致b和c值的差异。

答案 2 :(得分:1)

  

我是编程初学者。我没有得到这个程序怎么样   显示

的输出

只需了解comma operatorsprefix ,postfix

根据给你的链接中提到的规则

int a = (1,2,3);          // a is initialized with 3 last argument .
int b = (++a, ++a, ++a);  // a is incremented three time so becomes 6 and b initilized with 6 . 
int c = (b++, b++, b++);  // b incremented two times becomes 8  and c initialized with  8.
                          // b incremented once more time becomes 9