为什么我在增量错误中得到无效的左值

时间:2014-10-28 23:58:06

标签: c pointers

这是我的代码

 #include <stdio.h>
    int main(void)
    {
          int x[] = {10,20,30};
          *(x) ++;
     }

当我尝试编译它时,我收到一个错误&#34;无效的左值增量&#34;。我不明白为什么有任何无效价值。我知道数组名是指向数组中第一个元素的指针。 ISN&#39;吨 *(x)++与*(x)= *(x)+ 1相同?所以x [0]现在是11.有什么东西我不见了吗?我不是在改变数组指针。我知道这将是一个错误。

2 个答案:

答案 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]++;