Ошибки Lvalue и указатели на массив - PullRequest
0 голосов
/ 03 июня 2018

Код выглядит следующим образом

#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 голосов
/ 03 июня 2018

Вы не можете увеличить имя массива.Если бы вы сделали следующее, было бы хорошо, если бы вы работали с указателями:

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;
}
0 голосов
/ 03 июня 2018

Вы можете использовать для добавления значения индекса в массив указателя для отображения значений массива.

Код:

#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

0 голосов
/ 03 июня 2018

Операндом ++ должен быть изменяемый lvalue.

С C11, глава §6.5.2.4

Операнд постфиксаоператор приращения или убывания должен иметь атомарный, квалифицированный или неквалифицированный вещественный или указательный тип, а должен быть изменяемым значением l.

Имя массива не является изменяемымименующий.Следовательно, он не может использоваться в качестве операнда ++.

Добавить, цитируя C11, глава §6.3.2.1

[...] Модифицируемое lvalue - это lvalue, которое не имеет типа массива , не имеет неполного типа, не имеет типа с ограничениями, и если это структура или объединение, не имеет какого-либо члена (включая, рекурсивно, любойэлемент или элемент всех содержащихся агрегатов или союзов) с ограниченным типом.

...