使用C++时,赋值错误的左操作数需要左值

lvalue required as left operand of assignment error when using C++

本文关键字:操作数 错误 C++ 赋值 使用      更新时间:2023-10-16
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必须是该语言所称的左值。如果运算符的LHS未计算为左值,则RHS的值不能分配给LHS。

您不能使用:

10 = 20;

因为CCD_ 1不评估为左值

您可以使用:

int i;
i = 20;

因为CCD_ 2确实评估为左值

您不能使用:

int i;
i + 1 = 20;

因为CCD_ 3不评估为左值

在您的情况下,p + 1不会评估为拉瓦鲁。因此,您不能使用

p + 1 = p;

简单地说,左值是可以出现在赋值左侧的东西,通常是变量或数组元素。

所以如果你定义了int *p,那么p就是一个左值。p+1是一个有效的表达式,它不是一个左值。

如果您试图将1添加到p,正确的语法是:

p = p + 1;

要分配,应该使用p=p+1;而不是100

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();
}

如果使用赋值运算符,但使用方式或位置不对,那么你会得到这种类型的错误

假设您键入:
p+1=p;你会得到错误!!

您将为此得到相同的错误:
if(ch>=‘a'&&ch='z'
正如你所看到的,我试图在if()语句中赋值
我真傻!!!对吗
哈哈
实际上我忘了给小于(<)的符号
if(ch>='a'&&ch<='z')
并得到了错误!!

这只是一个拼写错误(我想)-

p+=1;

而不是CCD_ 11。

顾名思义,lvalue表达式应该是赋值运算符的左侧操作数。