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
。
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
。
,
,表示分隔不同的值。int a = (1,2,3);
int b = (++a, ++a, ++a);
int c = (b++, b++, b++);
是一个逗号运算符。它评估第一个操作数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.
如果使用逗号运算符,表达式的求值顺序从左到右保证。
((b++,b++),b++)
,因此(b++,b++)
被视为外部逗号,
的一个操作数。 - ameyCU这段代码并不好,任何理智的人都不会去编写它。你不应该花时间看这种代码,但我仍然会给出解释。
逗号操作符,
表示“执行左侧操作,丢弃任何结果,执行右侧操作并返回结果”。将这些部分放在括号中对功能没有影响。
更清晰地写出来,代码应该是:
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的值的差异。
我是编程新手。我不明白这个程序如何输出结果
根据给你提供的链接中的规则。
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