当我在主函数中调用它时,C-2d 数组打印函数不起作用

C-2d array print function not working when I call it in main function

我写了两个函数,readMatrix,它分配一个双指针并从键盘获取输入,第二个函数是打印函数。

当我在主函数中调用打印函数时,它完全不起作用。

这是代码:

void print(int** mat, int lin, int col) {
    int i,j;
    printf("Matrix is:\n");
    for(i=0; i<lin; i++) {
        for(j=0; j<col; j++) {
            printf("%d ", *(*(mat+i)+j));
        }
        printf("\n");
    }
}

int** readMatrix(int** mat, int lin, int col) {
    int x;
    int i,j;
    mat==(int**)malloc(lin*sizeof(int*));
    for(x=0; x<lin; x++) {
        mat[x]=(int*)malloc(col*sizeof(int));
    }
    
    for(i=0; i<lin; i++) {
        printf("Line %d: ", i);
        for(j=0; j<col; j++) {
            scanf("%d",  &mat[i][j]);
        }
    }
}


int main()
{
    int lin, col;
    int i,j;
    printf("Enter number of lines: ");
    scanf("%d", &lin);
    printf("Enter number of cols: ");
    scanf("%d", &col);
    int** mat = readMatrix(mat,lin,col);
    print(mat,lin,col);
    return 0;
}

输入后,我收到消息“Matrix is”,但矩阵没有出现,为什么?

如果我在 readMatrix 函数中调用 print 函数,它可以工作,但是如果我在 main 中调用它为什么不工作?

谢谢。

函数中没有使用参数matreadMatrix因为它的值id被覆盖了

int** readMatrix(int** mat, int lin, int col) {
    int x;
    int i,j;
    mat==(int**)malloc(lin*sizeof(int*));
    //...

此外,函数 return 什么都没有,尽管它的 return 类型不是 void。

所以这条记录

int** mat = readMatrix(mat,lin,col);

调用未定义的行为。

函数至少要声明在

int** readMatrix( int lin, int col);

并在函数末尾写

return mat;

例如

int** readMatrix(int lin, int col) {
    int **mat==(int**)malloc(lin*sizeof(int*));
    //...

    return mat;
}

并且该函数将被调用为

int** mat = readMatrix(lin,col);

同样在 main 中,当数组不再需要时,你应该释放所有分配的内存。

例如

for ( i = 0; i < lin; i++ )
{
    free( mat[i] );
}

free( mat );

readMatrixmat 作为参数,但是那是没有用的,因为它只接收它的值,它还没有值。 (为了能够在调用例程中更改变量,例程必须接收指向它的指针,而不是它的值。)

readMatrix 声明为 return int ** 但没有 return 语句。

mat==(int**)malloc(lin*sizeof(int*)); 使用 == 来比较值。它不执行分配。

readMatrix 的声明中删除 mat 参数。从对 readMatrix 的调用中删除 mat 参数。将 == 更正为 =。添加一个 return 语句,其中 return 是 readMatrix 中执行的分配中 mat 的值。