Код выглядит следующим образом
#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здесь ??
Вы не можете увеличить имя массива.Если бы вы сделали следующее, было бы хорошо, если бы вы работали с указателями:
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; }
Вы можете использовать для добавления значения индекса в массив указателя для отображения значений массива.
Код:
#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; }
Выход:
Операндом ++ должен быть изменяемый lvalue.
++
С C11, глава §6.5.2.4
C11
Операнд постфиксаоператор приращения или убывания должен иметь атомарный, квалифицированный или неквалифицированный вещественный или указательный тип, а должен быть изменяемым значением l.
Имя массива не является изменяемымименующий.Следовательно, он не может использоваться в качестве операнда ++.
Добавить, цитируя C11, глава §6.3.2.1
[...] Модифицируемое lvalue - это lvalue, которое не имеет типа массива , не имеет неполного типа, не имеет типа с ограничениями, и если это структура или объединение, не имеет какого-либо члена (включая, рекурсивно, любойэлемент или элемент всех содержащихся агрегатов или союзов) с ограниченным типом.