4

我读过逗号运算符用于分配表达式,并将正确的表达式提供给左值。

但是为什么这个程序在不使用括号时将左表达式分配给左值。我使用的是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
4

1 回答 1

8

因为,运算符的优先级低于=一个,所以这...

a=b+2,b*5;

...实际上将被评估为...

a = b + 2;
b * 5;

withint i = b + 2, b * 5;有点不同,因为逗号在声明语句中具有不同的含义,将不同的声明相互分隔。考虑一下:

int a = 3, b = 4;

您在这里仍然有逗号,但现在它分隔了两个变量赋值声明。这就是编译器尝试从您的示例中处理该行的方式 - 但无法从b * 5行中获得任何含义(它既不是赋值也不是声明)。

现在,int a = (b + 2, b * 5)不同了:您表达式的值分配给类型b + 2, b * 5的变量。第一个子表达式被丢弃,只剩下.aintb * 5

于 2013-09-06T20:30:16.563 回答