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

C 为什么我在增量错误中得到一个无效的左值,c,pointers,C,Pointers,这是我的密码 #include <stdio.h> int main(void) { int x[] = {10,20,30}; *(x) ++; } #包括 内部主(空) { int x[]={10,20,30}; *(x) ++; } 当我试图编译它时,我得到一个错误“增量中的左值无效”。我不明白为什么会有任何无效值。我知道数组名是指向数组中第一个元素I的指针。不是吗 *(x) ++与*(x)=*(x)+1相

这是我的密码

 #include <stdio.h>
    int main(void)
    {
          int x[] = {10,20,30};
          *(x) ++;
     }
#包括
内部主(空)
{
int x[]={10,20,30};
*(x) ++;
}
当我试图编译它时,我得到一个错误“增量中的左值无效”。我不明白为什么会有任何无效值。我知道数组名是指向数组中第一个元素I的指针。不是吗
*(x) ++与*(x)=*(x)+1相同?所以x[0]现在是11。我有什么遗漏吗?我没有更改数组指针。我知道这是一个错误。

增量后操作符(
expr++
)比取消引用操作符绑定得更紧密,因此在
*x
周围需要括号。这就是您需要的:

(*x)++;

如果没有它们,您将尝试递增
x
,然后取消对它的引用。由于
x
是一个数组,因此不可修改,这就是为什么会出现错误,因为
x++
是不允许的。

增量后操作符(
expr++
)绑定得比取消引用操作符更紧密,因此在
*x
周围需要括号。这就是您需要的:

(*x)++;

如果没有它们,您将尝试递增
x
,然后取消对它的引用。由于
x
是一个数组,因此不可修改,这就是为什么会出现错误,因为
x++
是不允许的。

数组的名称是一个左值,不能在C中修改,因此会出现错误

关于:

*(x)++和*(x)=*(x)+1不一样吗

答案是“不”<代码>++(postifix增量)运算符的值大于
*
(取消引用)。所以

相当于

*(x++);

你可以做:

(*x)++;
或者另一种方法是(一个IMO更容易阅读;-)


数组的名称是一个左值,不能在C中修改,因此会出现错误

关于:

*(x)++和*(x)=*(x)+1不一样吗

答案是“不”<代码>++(postifix增量)运算符的值大于
*
(取消引用)。所以

相当于

*(x++);

你可以做:

(*x)++;
或者另一种方法是(一个IMO更容易阅读;-)


删除括号。无效。我的想法是对的,不是吗?我的错,改成
(*x)++
增量后运算符比取消引用运算符绑定得更紧密,因此需要
*x
周围的括号。或更改为
+*x删除括号。无效。我的想法是对的,不是吗?我的错,改成
(*x)++
增量后运算符比取消引用运算符绑定得更紧密,因此需要
*x
周围的括号。或更改为
+*x绑定得越紧就意味着优先级吗?是的,它意味着
x
++
x
*
之前放在一起。绑定得越紧就意味着优先级吗?是的,它意味着
x
++
放在
x
*
之前。