左值需要错误

tra*_*ank 8 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mys*_*ial 5

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

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

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

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

  • "Lvalue"可以位于赋值的左侧(可以存储的内容).这是指针的情况,但不是数组的情况.你不能修改`a`本身.因此,为什么你会收到这个错误. (4认同)
  • 这是'a`.静态数组不是Lvalues.所以你不能给他们任何东西.(++和 - 包括在内) (2认同)
  • 可以这样想 - 如果你增加"a",你如何回到数组的开头?你已经失去了你唯一的参考.如果将指针设置为"a"的开头并递增指针,则仍可通过引用"a"找到原始数组. (2认同)