在使用指针时,我编写了以下代码,
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错误的确切原因是什么,因为在此之前,我也遇到过这种错误的情况。其次,为什么指针上的算术在这种情况下是不合法的?
发布于 2011-11-22 05:23:45
你不能在静态数组上做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]);
}发布于 2011-11-22 06:38:38
在大多数情况下,数组名称的计算结果是一个适合赋值给指针的值--但它仍然是一个值,而不是实际的指针。
这类似于一个值,比如17。您可以获取17值,并将其赋给一个整数。一旦这样做了,您就可以递增、递减或以其他方式操作该int。但是,您不能对17本身做太多事情--它就是这样,不能改变。
数组的名称与此基本相同。它具有正确的类型,可以将其赋值给指针,但就其本身而言,它只是一个不能操作的值。如果将该值赋给一个指针,则可以操作该指针,但永远不能对原始值本身做太多操作--原始值就是原值,不能更改。
发布于 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
另外,我猜这取决于编译器?
https://stackoverflow.com/questions/8218693
复制相似问题