左值错误和数组指针

时间:2018-06-03 11:05:08

标签: c pointers compiler-errors lvalue

代码就像这样

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a[]={10,20,30,40,50};
 int j;
 for(j=0;j<5;j++)
 {
  printf("%d\n",*a);
  a++;
 }
 return 0;
}

输出 -

  

错误 - :Lvalue需要作为递增操作数

为什么Lvalue错误发生在这里?

3 个答案:

答案 0 :(得分:3)

++的操作数必须是可修改的左值。

来自C11,章节§6.5.2.4

  

后缀增量或减量运算符的操作数应具有原子的,合格的,   或不合格的真实或指针类型,应为可修改的左值。

数组名称不是可修改的左值。因此,它不能用作++的操作数。

添加,引用C11,章节§6.3.2.1

  

[...] 可修改的左值是一个左值   没有数组类型,没有不完整的类型,没有constqualified   类型,如果是结构或联合,则没有任何成员(包括,   递归地,所有包含聚合或联合的成员或元素)具有constqualified   类型。

答案 1 :(得分:2)

您无法增加数组的名称。你是否已经完成了以下工作,你可以使用指针进行处理:

int main()
{
 int a[]={10,20,30,40,50};
 int *b= a;
 int j;
 for(j=0;j<5;j++)
 {
  printf("%d\n",*b);
  b++;
 }
 return 0;
}

答案 2 :(得分:0)

您可以使用在指针数组上添加索引值来显示数组值。

代码:

#include <stdio.h>

int main()
{
   int a[]={10,20,30,40,50};
 int j;
 for(j=0;j<5;j++)
 {
  printf("%d\n",*(a+j));
 }

 return 0;
}

输出

enter image description here