这是我的代码
#include <stdio.h>
int main(void)
{
int x[] = {10,20,30};
*(x) ++;
}
当我尝试编译它时,我收到一个错误&#34;无效的左值增量&#34;。我不明白为什么有任何无效价值。我知道数组名是指向数组中第一个元素的指针。 ISN&#39;吨 *(x)++与*(x)= *(x)+ 1相同?所以x [0]现在是11.有什么东西我不见了吗?我不是在改变数组指针。我知道这将是一个错误。
答案 0 :(得分:3)
后增量运算符(expr++
)比解引用运算符绑定得更紧密,因此需要围绕*x
括号。这就是你需要的:
(*x)++;
如果没有它们,您会尝试增加x
,然后取消引用它。由于x
是一个数组,因此无法修改,这就是您收到错误的原因,因为x++
是不允许的。
答案 1 :(得分:1)
数组的名称是左值,无法在C中修改,因此您的错误。
关于:
Isn&#t; t *(x)++与*(x)= *(x)+ 1相同?
答案是&#34;否&#34;。 ++
(postifix increment)运算符具有higher precedence而不是*
(解除引用)。所以
*(x) ++;
相当于
*(x++);
你可以这样做:
(*x)++;
或其他方式(更容易阅读一个IMO; - )
x[0]++;