lvalue需要作为增量运算符

时间:2014-06-29 14:37:00

标签: c compiler-errors lvalue

我在此代码中收到与左值相关的错误:

#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.

为什么会出现这个问题? 任何帮助将不胜感激。

3 个答案:

答案 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));