我有一个问题将矩阵传递给C中的函数。我想要创建的函数:
void ins (int *matrix, int row, int column);
但我注意到与矢量相反,矩阵给我一个错误。如何将矩阵传递给函数呢?
编辑 - >有代码:
// 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");
}
}
答案 0 :(得分:20)
您必须将维数作为指针传递,
即。如果你的矩阵是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);
答案 1 :(得分:7)
如果您有现代C编译器,则可以对任何大小的2D矩阵执行以下操作
void ins (size_t rows, size_t columns, int matrix[rows][columns]);
重要的是尺寸在矩阵之前,因此它们是已知的。
在函数内部,您可以轻松地访问元素matrix[i][j]
,并且编译器正在为您执行所有索引计算。
答案 2 :(得分:0)
也可以将第一个维度留空,与(*矩阵)相同:
void ins (int matrix[][100], int row, int column);
答案 3 :(得分:0)
C - allocating a matrix in a function
上面你会发现我用C(gcc C11 / C99)以任何可能的方式分配和操作矩阵的函数。
答案 4 :(得分:0)
更好的方法是使用malloc函数并创建动态分配的数组,并使用2d数组做任何你想做的事情:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
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<n;i++)
a[i]=(int *)malloc(n*sizeof(int));
fun(a,m,n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
output:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
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<n;i++)
a[i]=(int *)malloc(n*sizeof(int));
fun(a,m,n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}