【问题标题】:lvalue required as left operand of assignment. What does that mean?左值需要作为赋值的左操作数。这意味着什么?
【发布时间】:2013-07-11 00:09:53
【问题描述】:

很抱歉再次打扰您,但我收到一个错误,我不太确定如何解决。我正在尝试创建一个函数,该函数可以打印具有 ROW 和 COLUMN 设定值的矩阵。但是,当我在“for”中使用 ROW 或 COLUMN 打印矩阵时,编译器会向我发送此错误:

错误:需要左值作为赋值的左操作数

我已经尝试阅读其他类似的问题,并试图找出在这种情况下错误的确切含义,但我似乎无法这样做。

所以我的问题是,这个错误是什么意思,我该如何解决?

谢谢

#include <stdio.h>
#include <stdlib.h>

#define ROW 3
#define COLUMN 4
#define SS1 4
#define SS2 1
#define SORTED1 8
#define SORTED2 1
#define SORTED3 5



void matrixPrint (int m[ROW][COLUMN]){
        for (ROW = 0; ROW < 3; ++ROW){
                for (COLUMN = 0; COLUMN < 4; ++COLUMN){
                    printf("%4d", m[ROW][COLUMN]);
        }
        printf ("\n");
    }
}

【问题讨论】:

    标签: c arrays printing operand


    【解决方案1】:

    预处理器的#define 创建一个文本替换,而不是一个变量。预处理后,您的程序如下所示:

    for (3 = 0; 3 < 3; ++3){
        for (4 = 0; 4 < 4; ++4){
            printf("%4d", m[3][4]);
        }
        printf ("\n");
    }
    

    这显然是无效的:你不能给常量赋值。在 C 语言中,您可以为其赋值的表达式称为 lvalue(一个可以出现在赋值中 left 的值)。这应该可以解释您看到的错误。

    要修复错误,引入两个循环变量,分别命名为rowcolumn,并使用它们代替ROWCOLUMN

    for (int row = 0; row < ROW ; ++row){
        for (int column = 0; column < COLUMN; ++column){
            printf("%4d", m[row][column]);
        }
        printf ("\n");
    }
    

    【讨论】:

    • "这显然是无效的:你不能给常量赋值。"我听说在 Fortran 中,你可以;)
    【解决方案2】:

    改成这样

    void matrixPrint (int m[ROW][COLUMN]){
        int row, column;
        for (row = 0; row < ROW; ++row){
            for (column = 0; column < COLUMN; ++column){
                printf("%4d", m[row][column]);
            }
            printf ("\n");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多