使用 C++ 时需要左值作为赋值错误的左操作数
Posted
技术标签:
【中文标题】使用 C++ 时需要左值作为赋值错误的左操作数【英文标题】:lvalue required as left operand of assignment error when using C++ 【发布时间】:2015-10-27 17:51:43 【问题描述】: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();
【问题讨论】:
您希望p + 1 = p
的结果是什么?
这不是 C 代码,而是 C++。更改标签和标题!
p + 1
和 p
都是内存中的单个地址,不能将一个地址分配给另一个地址
【参考方案1】:
当语句中有赋值运算符时,运算符的 LHS 必须是语言称为 lvalue 的东西。如果算子的 LHS 不计算为 lvalue,则无法将 RHS 中的值分配给 LHS。
你不能使用:
10 = 20;
因为10
不会评估为左值。
你可以使用:
int i;
i = 20;
因为i
确实评估为左值。
你不能使用:
int i;
i + 1 = 20;
因为i + 1
不会计算为左值。
在您的情况下,p + 1
不会评估为 lavalue。因此,您不能使用
p + 1 = p;
【讨论】:
【参考方案2】:要分配,您应该使用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();
【讨论】:
【参考方案3】:简单地说,左值是可以出现在赋值左侧的东西,通常是变量或数组元素。
所以如果你定义int *p
,那么p
就是一个左值。 p+1
,这是一个有效的表达式,不是左值。
如果您尝试将 1 加到 p
,正确的语法是:
p = p + 1;
【讨论】:
【参考方案4】:如果你使用了赋值运算符,但使用方式或位置错误, 那么你会得到这种类型的错误!
假设你输入: p+1=p;你会得到错误的!
你会得到同样的错误: if(ch>='a' && ch='z') 如您所见,我尝试在 if() 语句中进行分配!!! 我有多傻!!!对吗?? 哈哈 实际上我忘了给小于( 如果(ch>='a' && ch并得到错误!
【讨论】:
【参考方案5】:这只是一个错字(我猜)-
p+=1;
而不是p +1=p;
是必需的。
顾名思义,lvalue
表达式应该是赋值运算符的左操作数。
【讨论】:
以上是关于使用 C++ 时需要左值作为赋值错误的左操作数的主要内容,如果未能解决你的问题,请参考以下文章