左值作为赋值的左操作数。那是什么意思?

时间:2013-07-11 00:09:53

标签: c arrays printing operand

抱歉再次打扰你,但我收到的错误是我不太确定如何解决。我正在尝试创建一个函数,为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");
    }
}

2 个答案:

答案 0 :(得分:5)

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

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

这显然无效:您无法为常量赋值。在C-speak中,您可以指定的表达式称为lvalue(可以在分配中的左侧上显示的值)。这应该可以解释你看到的错误。

要修复错误,请引入两个循环变量,将其称为rowcolumn,然后使用它们代替ROWCOLUMN

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

答案 1 :(得分:0)

修复此类

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