在函数中传递矩阵(C)

Lc0*_*0rE 8 c matrix

我有一个问题将矩阵传递给C中的函数.有我想要创建的函数:

void ins (int *matrix, int row, int column);
Run Code Online (Sandbox Code Playgroud)

但我注意到与矢量相反,矩阵给我一个错误.如何将矩阵传递给函数呢?

编辑 - >有代码:

// Matrix

#include <stdio.h>
#define SIZE 100

void ins (int *matrix, int row, int column);
void print (int *matrix, int row, int column);

int main ()
{
    int mat[SIZE][SIZE];
    int row, col;

    printf("Input rows: ");
    scanf  ("%d", &row);
    printf("Input columns: ");
    scanf  ("%d", &col);

    printf ("Input data: \n");
    ins(mat, row, col);

    printf ("You entered: ");
    print(mat, row, col);

    return 0;
}

void ins (int *matrix, int row, int column);
{
    int i, j;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
        {
            printf ("Row %d column %d: ", i+1, j+1);
            scanf  ("%d", &matrix[i][j]);
        }
    }
}

void print (int *matrix, int row, int column)
{
    int i;
    int j;

    for(i=0; i<row; i++)
    {
        for(j=0; j<column; j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 20

您必须将维数作为指针传递,

即如果你的矩阵是2D(10乘100),那么:

void ins (int **matrix, int row, int column);
Run Code Online (Sandbox Code Playgroud)

但前面的错误,因为任何静态2D数组都要求第二级指针是const指向静态数组的指针.如果矩阵是动态数组,则前一个标题是正确的.所以正确的是:

void ins (int (*matrix)[100], int row, int column);
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

void ins (int (*matrix)[SIZE], int row, int column);
Run Code Online (Sandbox Code Playgroud)

或者干脆:

void ins (int matrix[10][100], int row, int column);
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

void ins (int matrix[SIZE][SIZE], int row, int column);
Run Code Online (Sandbox Code Playgroud)

  • 不可能像 OP 的示例中那样通过“具有与矩阵维数一样多的间接级别 (*) 的指针”来传递 2D 数组。答案的这一部分是完全错误的。 (2认同)

Jen*_*edt 7

如果您有现代C编译器,则可以对任何大小的2D矩阵执行以下操作

void ins (size_t rows, size_t columns, int matrix[rows][columns]);
Run Code Online (Sandbox Code Playgroud)

重要的是,尺寸在矩阵之前,因此它们是已知的.

在函数内部,您可以轻松访问元素matrix[i][j],编译器正在为您执行所有索引计算.