我无法编译这个程序。任何人都告诉我告诉我哪里出错了。
int i = 8, j, k;
++i = ++j = ++k = 8;
printf("\n %d \t %d \t %d",i,j,k);
它给出了错误
error : lvalue required as left operand of assignment
答案 0 :(得分:5)
段++i
不是左值(之所以这么命名是因为它们通常可以出现在赋值的左侧)。
正如标准所述(C11 6.3.2.1
):
左值是一个表达式(对象类型不是void),可能指定一个对象。
i
本身是一个左值,但是这样预先递增就意味着它不再如此,++i
是一个不代表任何特定对象的表达式。
答案 1 :(得分:1)
除了已经说过的内容之外,您不应该试图故意模糊代码。您已设法做到这一点,以至于您不了解自己的代码。写作编写实践会好得多:
int i = 8;
int j = 0;
int k = 0;
++i;
++j;
++k;
i = 8;
j = 8;
k = 8;
printf("\n %d \t %d \t %d", i, j, k);
现在,当我们修改编码样式以在单独的行上使用声明时,很明显j和k没有被初始化。我修复了上面的错误。
答案 2 :(得分:0)
"需要左值"意味着您无法为内存中没有位置的内容分配值。基本上你需要一个变量才能分配一个值。 在这种情况下,您的变量具有++运算符,它既充当语句又充当赋值
答案 3 :(得分:0)
++i = ++j = ++k = 8;
无效。 ++运算符既作为语句又作为赋值,因此您无法分配它并在右侧提供值。你可以做到
i = j = k = 8;
或
i++; j++; k++;
这两者具有非常不同的含义。看起来你可能想要做第一个,因为你从不分配j或k并且增加它们没有意义。