【问题标题】:Error: expression must be a modifiable l value错误:表达式必须是可修改的 l 值
【发布时间】:2019-04-08 21:18:31
【问题描述】:

我试图将数组的每个值乘以一个整数,但是我目前遇到以下错误:“表达式必须是可修改的左值”。这段代码的目的是,当一个按钮被按下时,矩形被放大了 2 倍的标量因子。我该如何解决这个错误?

void Draw_Rectangle(unsigned int *rectangle1)
{
    // Call draw rectangle function to draw rectangle 1
    GraphicsFunction_drawRectangle (*rectangle1, *(rectangle1 + 1));

}

int main (void)
{
    unsigned int rectangleOne[4] = {85, 5, 130, 20};
    // Call function to draw the rectangle in initial position
    Draw_Rectangle(&rectangleOne[0]);

   while(1) {

       if(*(SWITCH_ptr) == 512) {
        int i = 0;
        for(i = 0; i < 4; i++){
            &rectangleOne[i] = rectangleOne[i] * 1.5;
        }
        Draw_Rectangle(&rectangleOne[0]);
    }
   }
}

【问题讨论】:

    标签: c arrays pointers


    【解决方案1】:

    &amp;rectangleOne[i] = rectangleOne[i] * 1.5; => rectangleOne[i] = rectangleOne[i] * 1.5;

    it is enough also to Draw_Rectangle(rectangleOne); 因为数组是通过指针传递的

    【讨论】:

      【解决方案2】:

      变化:

      &rectangleOne[i] = rectangleOne[i] * 1.5;
      

      到:

      rectangleOne[i] = rectangleOne[i] * 1.5;
      

      或者更简单地说,就是:

      rectangleOne[i] *= 1.5;
      

      原版的问题在于它试图分配给数组元素的地址,而不是数组元素本身。

      【讨论】:

      • 感谢您的帮助!如果我只想覆盖数组 rectangleOne 的第三个和第四个元素,这样 rectangleOne = {85, 5, 170, 30} 我该怎么做呢?我还需要使用指针吗?
      • 你可以做rectangleOne[2] = 170;和rectangleOne[3] = 30;
      猜你喜欢
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2015-03-30
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      相关资源
      最近更新 更多