【问题标题】:lvalue required as left operand of assignment error when using C++使用 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 + 1p 都是内存中的单个地址,不能将一个地址分配给另一个地址

标签: c++ pointers required lvalue


【解决方案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 表达式应该是赋值运算符的左操作数。

          【讨论】:

            猜你喜欢
            • 2017-01-10
            • 1970-01-01
            • 2011-12-20
            • 2011-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多