首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lvalue required错误

Lvalue required错误
EN

Stack Overflow用户
提问于 2011-11-22 05:18:28
回答 3查看 2.6K关注 0票数 8

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

代码语言:javascript
复制
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 required错误的确切原因是什么,因为在此之前,我也遇到过这种错误的情况。其次,为什么指针上的算术在这种情况下是不合法的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-22 05:23:45

你不能在静态数组上做a++ --它不是一个左值。相反,您需要在指针上执行操作。试试这个:

代码语言:javascript
复制
int *ptr = a;
int i;
for(i=0;i<5;i++)
{
    printf("\n%d",*ptr);
    ptr++;
}

尽管在这种情况下,使用索引可能更好:

代码语言:javascript
复制
int i;
for(i=0;i<5;i++)
{
    printf("\n%d",a[i]);
}
票数 6
EN

Stack Overflow用户

发布于 2011-11-22 06:38:38

在大多数情况下,数组名称的计算结果是一个适合赋值给指针的值--但它仍然是一个值,而不是实际的指针。

这类似于一个值,比如17。您可以获取17值,并将其赋给一个整数。一旦这样做了,您就可以递增、递减或以其他方式操作该int。但是,您不能对17本身做太多事情--它就是这样,不能改变。

数组的名称与此基本相同。它具有正确的类型,可以将其赋值给指针,但就其本身而言,它只是一个不能操作的值。如果将该值赋给一个指针,则可以操作该指针,但永远不能对原始值本身做太多操作--原始值就是原值,不能更改。

票数 3
EN

Stack Overflow用户

发布于 2011-11-22 05:30:51

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Flvalue.htm

另外,我猜这取决于编译器?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8218693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档