2014-10-04 4 views
-9

Я выполнял некоторые задания на языке C и наткнулся на эту ошибку. Назначение - это матрица с использованием массива 2d. Я хотел, чтобы программа двигала 1 слот вверх в матрице, и если он достигает вершины, то есть arr [0] [], переместитесь в нижнюю часть в том же столбце, то есть arr [size-1] []. В этой строке кода я пытался назначить (размер-1) на (i-1), когда i = 0, но я получил ошибку «lvalue, требуемую как левый операнд назначения». Пожалуйста, помогите и заблаговременно.«lvalue требуется как левый операнд присвоения» в C

if (i==0){ 
    i-1 = size-1; 
} 
+3

Подумайте об этом. Присвоение чего-либо '(i-1)' не имеет смысла. –

+2

Почему бы просто не назначить 'size'' i'? –

+3

«Я пытался назначить (размер-1) на (i-1)» - что бы это означало даже * *? –

ответ

0

C Стандарт ИСО/МЭК 9899: СК2 § 6.5.16/2 Назначение оператора

Оператор присваивания должен иметь изменяемую именующее выражение в качестве своего левого операнда .

§ 6.3.2.1/1 Lvalues, массивы и функция десигнатор

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

Потому что i-1 не является назначаемой вещью, lvalue, которую вы не можете присвоить ей.

+0

@ Downvoter могу я спросить вас, почему вы остановились? – 4pie0

+0

Большое спасибо 0d0a. Я читал это снова и понял, насколько я был глуп. Должен иметь только назначенный размер для i. В любом случае, хорошо знать, что я не могу присвоить значение i-1. –

-1

в вашем выражении i-1 = size-1; i-1 приведет к целому числу, а size-1 также приведет к целому числу, и на последнем этапе компилятор попытается присвоить целое целому числу, которое является незаконным, поскольку в левой части оператора присваивания должна быть переменная, имеющая так что значение с правой стороны может быть присвоено ему. но здесь целочисленная константа с левой стороны не имеет места в памяти, поэтому отображается ошибка lvalue.

Смежные вопросы