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

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

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

这只是一个错字(我猜)-

p+=1;

而不是 p +1=p; 是必需的。

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

当语句中有赋值运算符时,运算符的 LHS 必须是语言所称的 lvalue。如果运算符的 LHS 未评估为 lvalue,则无法将 RHS 中的值分配给 LHS。

您不能使用:

10 = 20;

因为 10 的计算结果不是 左值

您可以使用:

int i;
i = 20;

因为 i 的计算结果为 lvalue

您不能使用:

int i;
i + 1 = 20;

因为 i + 1 的计算结果不是 左值

在您的例子中,p + 1 的计算结果不是 lavalue。因此,您不能使用

p + 1 = p;

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

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

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

p = p + 1;

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

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

你会得到同样的错误:
如果(ch>='a' && ch='z')
如您所见,我尝试在 if() 语句中分配!!!
我有多傻!!!对吗??
哈哈
其实我忘了给less then(<) sign
如果(ch>='a' && ch<='z')
出现错误!!