C中的作业

时间:2011-09-22 11:02:29

标签: c assignment-operator

你能用C进行多次赋值操作吗?

int a = 0, b = 0, c = 0, d = 0;
(((a = b) = c) = d);

我读过某个地方C标准声明这个结果不是左值?这是未定义的吗?

3 个答案:

答案 0 :(得分:11)

你可以做到

a = b = c = d;

相同
a = (b = (c = d));

如你所说,(子)表达式(a = b)不是左值,不能赋值。

答案 1 :(得分:0)

a=b返回b的值,该值不是左值,这就是为什么c的值无法分配给该表达式的原因。 使用括号,您将改变通常的作业顺序。

a = b = c = d;

在这种情况下,d的值已分配给c,然后将值c分配给b,然后将值b分配给a }。

答案 2 :(得分:0)

     a=b=c=d;

相同
    (a = (b = (c = d))); 

因为'='运算符从右向左分配..