请解释一下为什么它的行为不同.
int main() { int p; p = (printf("stack"),printf("overflow")); printf("%d",p); return 0; }
这将输出作为stackoverflow8.但是,如果我删除了paranthesis,那么:
p = printf(“stack”),printf(“overflow”);将输出提供为stackoverflow5
解决方法
The Comma Operator
逗号运算符的优先级低于赋值(它的优先级低于任何运算符),因此如果删除括号,则首先进行赋值,并丢弃第二个表达式的结果.所以…
int a = 10,b = 20; int x = (a,b); // x == 20 int y = a,b; // y == 10 // equivalent (in terms of assignment) to //int y = a;
请注意,第三行将导致错误,因为它被解释为b的重新声明,即:
int y = a; int b;
我起初错过了这个,但这很有道理.它与a和b的初始声明没有什么不同,在这种情况下,逗号不是运算符,它是一个分隔符.