我在此代码中收到与左值相关的错误:
#include <stdio.h>
#include<string.h>
main()
{
int a[]={10,20,30,40,50};
int j;
for(j=0;j<5;j++)
{
printf("%d\n",a);
a++;
}
return 0;
}
显示的错误是:
lvalue is required as an increment operator.
为什么会出现这个问题? 任何帮助将不胜感激。
答案 0 :(得分:3)
您正在尝试增加int[]
变量,但这种变量不支持增量运算符。
如果你试图迭代数组,你只需要使用用作循环条件的变量和下标运算符:
for (int j = 0; j < 5; ++j)
printf("%d\n",a[j]);
主要问题是++x
运算符在语义上等同于x = x + 1, x
。这需要x
可分配(lvalue)(因为您为其分配了新值)但是数组不可分配。
答案 1 :(得分:1)
在此表达式中
a++;
创建类型为int *
的临时对象,指向数组a的第一个元素。您不能增加临时对象。如果您要编写例如
int x = 10;
( x + 0 )++;
您可以按以下方式编写程序
#include <stdio.h>
int main()
{
int a[] = { 10, 20, 30, 40, 50 };
int *p;
for ( p = a; p != a + sizeof( a ) / sizeof( *a ); ++p )
{
printf( "%d\n", *p );
// or printf( "%p\n", p ); depending on what you want to output
}
return 0;
}
答案 2 :(得分:0)
虽然数组衰减到指针是正确的,但数组不是指针,你可以不用增加它。
相反,你可以通过这样做让它衰减到指针。
printf("%d\n", *(a + j));