请解释我为什么它的行为不同。
int main() {
int p;
p = (printf("stack"),printf("overflow"));
printf("%d",p);
return 0;
}
这将输出作为 stackoverflow8。但是,如果我删除括号,那么:
p = printf("stack"),printf("overflow");
给出输出为stackoverflow5
请解释我为什么它的行为不同。
int main() {
int p;
p = (printf("stack"),printf("overflow"));
printf("%d",p);
return 0;
}
这将输出作为 stackoverflow8。但是,如果我删除括号,那么:
p = printf("stack"),printf("overflow");
给出输出为stackoverflow5
逗号运算符的优先级低于赋值(它的优先级低于任何运算符),因此如果删除括号,则首先进行赋值,然后丢弃第二个表达式的结果。所以...
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
它与 and的初始声明没有什么不同b
,在这种情况下,逗号不是运算符,而是分隔符。