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
的输出。
答案 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 operators和prefix ,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