Lvalue需要数组中的错误

时间:2014-03-14 13:52:46

标签: c arrays pointers

#include <stdio.h>
#include <string.h>

main()
{
    int x[100];
    int i;
    for(i=0;i<10;i++)
    {
        *(x++) = i;
    }
}

main.c:在函数'main'中: main.c:10:12:错误:需要左值作为递增操作数          *(x ++)= i;

你能解释一下我收到这个错误的原因吗?

4 个答案:

答案 0 :(得分:1)

可修改的l值不能具有数组类型。 l值是一个表达式,它可以出现在赋值的左侧。如果要声明大量相同类型的变量,可以使用数组,并且可以轻松地对其进行索引,因为它的布局在某种意义上是连续的。

当您想要不断更改变量所指向的地址的值时,可以使用指针。

你能做的是:

int x[100];
int *p_x = &x[0];
int i;
for(i=0;i<10;i++)
{
    *(p_x++) = i;
}

由于x是一个数组 - 它的值无法修改 - 当你执行x++时,你试图增加它的值,从而得到错误。

答案 1 :(得分:0)

数组名称是不可修改的l值。你无法修改它。 *(++x) = i错了。你可以试试这个

int *ptr = x;
for(i=0;i<10;i++)
{
    *(ptr++) = i;
}

答案 2 :(得分:0)

该行:

*(x++) = i

尝试增加x,这是数组的名称而不是左值(即不能出现在赋值的左侧,并且不可修改)。

答案 3 :(得分:0)

x等数组类型的表达式不能是++运算符的操作数。

除了数组元素本身(xx[0])之外,没有为变量x[99]预留存储空间; IOW,我们可以应用自动增量运算符的内存中没有任何内容。 x将会'衰变'#34;在大多数情况下,指针值,但指针值不存储在您可以修改它的任何地方。

正如其他人所示,您可以声明一个单独的指针变量并使用它而不是x

int *p = x;
for ( i = 0; i < 100; i++ )
  *p++ = i;

Postfix ++的优先级高于一元*,因此*p++将被解析为*(p++)

虽然坦率地说以下内容同样适用:

for ( i = 0; i < 100; i++ )
  x[i] = i;