проблема при выполнении приращения в выражении - PullRequest
0 голосов
/ 11 мая 2019

Когда я компилирую этот код, он показывает ошибку как lvalue, требуемое как операнд приращения

int main(void)
{
 int x,y,z;
 x=8++;
 y=++x++;
 z=(x+y)--;
 printf("x=%d,y=%d,z=%d",x,y,z;
 return 0;
}

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

Когда вы пишете something++ или ++something, это примерно эквивалентно

something = something + 1

(разница между something++ и ++something в том, что вы получаете, когда присваиваете результат чему-то другому).

Из-за этого операнд ++ должен быть чем-то, что вы можете назначить.

8++ эквивалентно 8 = 8 + 1, но вы не можете присвоить число.

++x++ будет эквивалентно чему-то вроде (x = x + 1) = (x = x + 1) + 1, я даже не могу понять, что это может означать.

(x+y)-- эквивалентно (x + y) = (x + y) - 1. Вы не можете назначить дополнительное выражение (какую переменную вы бы задали)?

Вы должны использовать ++ или -- только когда вы действительно хотите обновить переменную. Это не общая замена для + 1 или - 1. Итак, ваша программа должна быть:

x = 8 + 1;
y = 1 + x + 1;
z = (x + y) - 1;

Будет напечатано

x = 9, y = 11, z = 19
0 голосов
/ 11 мая 2019
Константа

не может быть изменена.8 - это постоянное значение.(x+y) также не является значением, которое может быть увеличено и где-то сохранено.

x++ использует значение x, а затем увеличивает x.Таким образом, lvalue изменяется не только в результате операции.

правильное значение

z=(x+y)-1;
x=8+1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...