我读过,逗号运算符用于赋值表达式,右表达式用于左值。
但是为什么这个程序在不使用括号时将左表达式分配给左值。我正在使用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
答案 0 :(得分:8)
由于,
运算符的优先级低于=
运算符,因此...
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
表达式的值分配给a
类型的变量int
。第一个子表达式被丢弃,只剩下b * 5
。