左值需要错误

时间:2011-11-21 21:18:28

标签: c pointers

在使用指针时,我编写了以下代码,

int main()
{
    int a[]={10,20,30,40,50};
    int i;
    for(i=0;i<5;i++)
    {
        printf("\n%d",*a);
        a++;
    }
    return 0;
}

现在根据我的理解,数组名称本身是c中的地址,并且根据我的知识,完成的指针算法是正确的。但是,当我尝试运行代码时,它给了我“Lvalue Required”错误。

那么发生Lvalue所需错误的确切原因是什么呢?因为在此之前我也遇到过这种错误的情况。其次,为什么在这种情况下指针的算术在这里不合法?

3 个答案:

答案 0 :(得分:5)

你不能在静态数组上做a++ - 这不是左值。你需要在指针上做。试试这个:

int *ptr = a;
int i;
for(i=0;i<5;i++)
{
    printf("\n%d",*ptr);
    ptr++;
}

虽然在这种情况下,最好只使用索引:

int i;
for(i=0;i<5;i++)
{
    printf("\n%d",a[i]);
}

答案 1 :(得分:2)

在大多数情况下,数组的名称求值为适合分配给指针的值 - 但它仍然是值,而不是实际指针。

这类似于17之类的值。您可以取值17,并将其分配给int。一旦你这样做,你可以增加,减少和操纵int。但是,你不能对17本身做任何事情 - 它就是这样,不能改变。

数组的名称几乎相同。它有正确的类型,可以将它分配给指针,但它本身只是一个你无法操纵的值。如果将该值赋给指针,则可以操作指针,但是对于原始值本身永远不会做太多 - 它就是这样,并且无法更改。

答案 2 :(得分:1)