在c中使用逗号运算符
我已经读过,逗号运算符用于赋值表达式,右表达式用于左值。
但是为什么这个程序在不使用括号时将左表达式分配给左值。我正在使用turbo c编译器
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
因为运算符的优先级低于=
1,所以……
a=b+2,b*5;
……实际上会被评估为……
a = b + 2; b * 5;
用int i = b + 2, b * 5;
有点不同,因为逗号在声明语句中具有不同的含义,将不同的声明彼此分开。 考虑一下:
int a = 3, b = 4;
你这里仍然有逗号,但现在它将两个变量赋值声明分开。 这就是编译器试图从你的例子中处理那一行的方式 – 但是没有从b * 5
行得到任何意义(它既不是赋值也不是声明)。
现在, int a = (b + 2, b * 5)
是不同的:你将 b + 2, b * 5
表达式的值赋给int
类型的变量a
。 第一个子表达式被丢弃,只剩下b * 5
。