int main()
{
int x[3]={4,5,6};
int *p=x;
p +1=p;/*compiler shows error saying
lvalue required as left
operand of assignment*/
cout<<p 1;
getch();
}
ответ
Если у вас в операторе есть оператор присваивания, LHS оператора должен быть чем-то, что язык вызывает lvalue. Если LHS оператора не оценивает значение lvalue, значение от RHS не может быть присвоено LHS.
Вы не можете использовать:
10 = 20;
так 10
не оценивает к Lvalue.
Вы можете использовать:
int i;
i = 20;
поскольку i
делает оценку к Lvalue.
Вы не можете использовать:
int i;
i + 1 = 20;
так i + 1
не оценивает к Lvalue.
В вашем случае p + 1
не оценивает lavalue. Таким образом, вы не можете использовать
p + 1 = p;
Для назначения, вы должны использовать p=p+1;
вместо p+1=p;
int main()
{
int x[3]={4,5,6};
int *p=x;
p=p+1; /*You just needed to switch the terms around*/
cout<<p<<endl;
getch();
}
спасибо, я не знал о оценке lvalues –
Это просто опечатка (я думаю) -
p+=1;
вместо p +1=p;
не требуется.
Как следует из названия lvalue
выражение должно быть левым операндом оператора присваивания.
Проще говоря, именующее это то, что может появиться на левой части присваивания, обычно переменной или элемента массива.
Так что, если вы определяете int *p
, то p
является lvalue. p+1
, который является допустимым выражением, не является значением lvalue.
Если вы пытаетесь добавить 1 к p
, правильный синтаксис:
p = p + 1;
, если используется оператор присваивания, но использовать его в неправильном направлении или в неправильном месте, , то вы получите эти типы ошибок!
предположим, если вы наберете:
p + 1 = p; вы получите ошибку!
вы получите ту же ошибку, для этого:
если (ч> = «а» & & ч = «г»)
, как вы видите, можно видеть, что я я пытался назначить, если() заявление!!!
как глупо я !!! правильно??
ха-ха
на самом деле я забыл дать меньше (<) знак
если (ч> = 'а' & & ч < = 'г')
и получил ошибку !!
Что вы ожидаете от результата 'p + 1 = p'? –
Это код не C, а C++. Измените тег и название! – Olaf