2012-07-11 63 views
3

我传递一个矩阵的函数C.一个问题,还有就是我想创建功能:在传递函数矩阵(C)

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

,但我注意到,相较于载体,矩阵给我一个错误。我如何将我的矩阵传递给一个函数?

EDIT - >存在的代码:

// 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

多少是你的矩阵的diemensions?是1D还是2D? – 2012-07-11 08:34:33

+0

可能的重复http://stackoverflow.com/questions/546860/passing-arrays-and-matrices-to-functions-as-pointers-and-pointers-to-pointers-in/11274267#11274267 – Ulterior 2012-07-11 08:40:43

回答

15

你必须通过尺寸指针的数量,

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

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

但以前是错误的,因为任何静态二维数组都要求第二级指针是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); 
+0

谢谢。如果我有一个常量维度(查看我的编辑)定义的大小,我需要更改代码? – Lc0rE 2012-07-11 08:38:01

7

如果你有一个现代C编译器,您可以为任何尺寸的2D矩阵执行以下操作

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

重要的是,大小出现在矩阵之前,使它们在那里是已知的。

在你的函数中,你可以很容易地访问元素,因为matrix[i][j]和编译器正在为你做所有的索引计算。

0

它也有可能离开的第一个维度空,同为(*矩阵):

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

更好的方法来使用malloc函数创建动态分配的数组,做任何你想用二维数组做:

#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; 
}