当我编译这段代码时,它显示为左值的错误作为增量操作数
int main(void)
{
int x,y,z;
x=8++;
y=++x++;
z=(x+y)--;
printf("x=%d,y=%d,z=%d",x,y,z;
return 0;
}
答案 0 :(得分:2)
当您写something++
或++something
时,它大致等同于
something = something + 1
(something++
和++something
之间的区别在于将结果分配给其他对象后得到的结果。)
因此,++
的操作数必须是您可以分配的内容。
8++
等同于8 = 8 + 1
,但您不能分配一个数字。
++x++
等同于(x = x + 1) = (x = x + 1) + 1
之类的东西,我什至无法理解其意图。
(x+y)--
等效于(x + y) = (x + y) - 1
。您不能分配给加法表达式(您要设置哪个变量)?
仅在实际要更新变量时才应使用++
或--
。它不是+ 1
或- 1
的一般替代品。因此,您的程序应为:
x = 8 + 1;
y = 1 + x + 1;
z = (x + y) - 1;
这将打印
x = 9, y = 11, z = 19
答案 1 :(得分:0)
常量不能更改。 8
是一个常数。 (x+y)
也不是可以递增并存储在某处的值。
x++
使用x
的值,然后递增x
。因此,左值本身不仅会更改操作的结果。
正确是
z=(x+y)-1;
x=8+1;