2013-11-27 60 views
-1

首先 - 我的代码工作:传递2矩阵的计算未知大小作为参数

void main(){ 
int mat1[5][5]={{1,2,3,4,5}, 
       {6,2,5,5,6}, 
       {1,5,6,6,7}, 
       {4,5,6,7,8}, 
       {5,6,7,8,9}}; 
int mat2[3][3]={{1,2,3}, 
       {2,3,4}, 
       {3,4,5}}; 
    int mat1size=5,mat2size=3,maxsize=MAX(mat1size,mat2size),*ptr,arraysize=0; 
    ptr=func(mat1,mat2,maxsize,&arraysize); 
    . 
    . 
    . 
    } 


int* func(int mat1[][5],int mat2[][3],int maxsize,int* arraysize){ 
int i,j,*ptr=(int*)malloc(sizeof(int)*3); 
    if(fptr==NULL){ 
    printf("Out of memory!"); 
    return; 
    } 
for(i=0;i<maxsize;i++) 
    for(j=0;j<maxsize;j++) 
     if(mat1[i][j]==mat2[i][j]){ 
      if(*arraysize%3==0 && *arraysize!=0) 
       ptr=(int*)realloc(ptr,sizeof(int)*(*arraysize+3)); 
      ptr[*arraysize]=i; 
      ptr[*arraysize+1]=j; 
      ptr[*arraysize+2]=mat1[i][j]; 
      *arraysize+=3; 
     } 
return ptr; 
} 

问题是,我在函数的签名声明矩阵列。我正在寻找更通用的解决方案。 如果你想知道函数应该做的是这样的: 它检查两个矩阵上的每个公共索引。如果值相等 - 将行,列和值添加到新数组并将其返回。

回答

0

使用变长数组作为函数的参数(这是100%的标准C99):

#include <stdio.h> 

void print_matrix(size_t w, size_t h, int m[w][h]) 
{ 
    for (size_t i = 0; i < w; i++) { 
     for (size_t j = 0; j < h; j++) { 
      printf("%3d ", m[i][j]); 
     } 
     printf("\n"); 
    } 
} 

int main() 
{ 
    int arr[2][3] = { 
     { 1, 2, 3 }, 
     { 4, 5, 6 } 
    }; 

    print_matrix(2, 3, arr); 
    return 0; 
} 
+0

哇,这是快!谢谢,只能在6分钟内接受答案,所以我会等一下:> size_t是什么意思? 编辑:试了一下,没有工作。 “错误:一个参数是不允许的” –

+0

@MuliYulzary我再说一遍,这是C99。您需要使用支持C99的编译器进行编译。不是C++编译器,而是C编译器。不是一个像微软MSVC那样的过时的过时产品,而是像GCC或者叮当这样的体面的C编译器。 “size_t是什么意思?” - 你应该可以谷歌那一个。 – 2013-11-27 23:56:32

+0

耶稣很抱歉提出问题......为什么每个人都这么苛刻?没有初学者的空间?这变得非常令人沮丧。 –