左值需要错误
在使用指针时,我编写了以下代码,
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所需错误的确切原因是什么呢?因为在此之前我也遇到过这种错误的情况。 其次,为什么在这种情况下指针的算术在这里不合法?
你不能在静态数组上做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]); }
在大多数情况下,数组的名称求值为适合分配给指针的值 – 但它仍然是值,而不是实际指针。
这类似于17
类的值。 您可以取值17
,并将其分配给int。 一旦你这样做,你可以增加,减少和以其他方式操纵该int
。 但是,你不能对17
本身做任何事情 – 它就是它,它是不可改变的。
数组的名称几乎是一样的。 它有正确的类型,可以将它分配给指针,但它本身只是一个你无法操纵的值。 如果将该值赋给指针,则可以操作指针,但是对于原始值本身永远不会做太多 – 它就是这样,并且无法更改。