在函数中传递矩阵(C)

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

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

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

编辑 – >有代码:

 // Matrix #include  #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"); } } 

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

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

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

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

 void ins (int (*matrix)[100], int row, int column); 

或者在你的情况下:

 void ins (int (*matrix)[SIZE], int row, int column); 

或者干脆:

 void ins (int matrix[10][100], int row, int column); 

或者在你的情况下:

 void ins (int matrix[SIZE][SIZE], int row, int column); 

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

 void ins (size_t rows, size_t columns, int matrix[rows][columns]); 

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

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

也可以将第一个维度留空,与(*矩阵)相同:

 void ins (int matrix[][100], int row, int column); 

C – 在函数中分配矩阵

上面你会发现我用C(gcc C11 / C99)以任何可能的方式分配和操作矩阵的函数。

更好的方法是使用malloc函数并创建动态分配的数组,并使用2d数组做任何你想做的事情:

 #include  #include  #include  void fun(int **arr,int m,int n) { int i, j; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } } int main() { int i,j,m,n; printf("enter order of matrix(m*n)"); scanf("%d*%d",&m,&n); int **a=(int **)malloc(m*sizeof(int)); for(i=0;i #include  #include  void fun(int **arr,int m,int n) { int i, j; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } } int main() { int i,j,m,n; printf("enter order of matrix(m*n)"); scanf("%d*%d",&m,&n); int **a=(int **)malloc(m*sizeof(int)); for(i=0;i