在c语言中使用逗号运算符
我已经读到逗号运算符被用来分配表达式,而正确的表达式被提供给左值 但为什么这个程序在不使用括号的情况下将左表达式赋值给左值呢在c语言中使用逗号运算符,c,comma,C,Comma,我已经读到逗号运算符被用来分配表达式,而正确的表达式被提供给左值 但为什么这个程序在不使用括号的情况下将左表达式赋值给左值呢 int b=2; int a; a=(b+2,b*5); // prints 10 as expected a=b+2,b*5; // prints 4 when not using parenthesis 还包括以下工作 int a =(b+2,b*5); 这会产生错误,我不明白原因 int a =b+2,b*5; // Error 由于,运算符的优先
int b=2;
int a;
a=(b+2,b*5); // prints 10 as expected
a=b+2,b*5; // prints 4 when not using parenthesis
还包括以下工作
int a =(b+2,b*5);
这会产生错误,我不明白原因
int a =b+2,b*5; // Error
由于
,
运算符的优先级低于=
运算符的优先级,因此
a=b+2,b*5代码>
。。。将实际评估为
a = b + 2;
b * 5;
inti=b+2,b*5
有点不同,因为逗号在声明语句中有不同的含义,将不同的声明彼此分开。考虑这一点:
int a = 3, b = 4;
这里仍然有逗号,但现在它分隔了声明上的两个变量赋值。这就是编译器试图处理示例中的那一行的方式-但未能从b*5
行中获得任何意义(它既不是赋值也不是声明)
现在,inta=(b+2,b*5)
不同了:将b+2,b*5
表达式的值赋给类型为int
的变量a
。第一个子表达式被丢弃,只剩下b*5
逗号运算符的进位低于赋值运算符,并且在类型声明中具有特殊意义,这就是上一个示例失败的原因。逗号运算符几乎不需要,而且几乎总是被错误使用。不要使用它