2014-02-28 46 views
1

我想将一个可变大小的二维数组传递给一个函数来打印它,但代码并不显示求和的确切结果。如何将多维数组传递给函数?

这是代码:

#include <stdio.h> 

#define ROW 5 
#define COLL 5 

void print_arr(int a[][COLL],int m,int n){ 
int i,j,sum; 
for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     printf("a[%d][%d]=%d\n",i,j,a[i][j]); 
    } 
    } 
} 

int sum_arr(int a[][COLL],int m,int n){ 
int i,j,sum; 

for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     sum+=a[i][j]; 
    } 
    } 
    return sum; 
} 

int main (void){ 
int a[ROW][COLL]; 
int i,j,m,n; 
int sum; 

printf("enter rows:");scanf("%d",&m); 
printf("enter coll:");scanf("%d",&n); 

for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     printf("a[%d][%d]=",i,j);scanf("%d",&a[i][j]); 
    } 
} 
print_arr(a,m,n); 
printf("\n"); 

    sum=sum_arr(a,m,n); 
    printf("sum=%d\n",sum); 
    return 0; 
} 

这是代码的结果

enter rows:2 
enter coll:3 
a[0][0]=5 
a[0][1]=8 
a[0][2]=4 
a[1][0]=7 
a[1][1]=9 
a[1][2]=6 
a[0][0]=5 
a[0][1]=8 
a[0][2]=4 
a[1][0]=7 
a[1][1]=9 
a[1][2]=6 

sum=-1217388517 

请告诉我什么是错的代码....

+0

尝试初始化'总和= 0' – paul

+0

pointer_multi_array.c:15:21:错误: 'n' 个这里未声明(不是在功能) pointer_multi_array.c:在函数 '主': pointer_multi_array.c:42: 2:错误:形式参数1的类型不完整 当我将数组的大小更改为n时,出现了上述错误 –

回答

1

您应该通过数组的第二维尺寸到函数的精确大小,而不是COLL。将其更改为m(或n,无论如何) 它将数字5传递给函数,而数字应该是3 :)如何,这不是你代码不工作的主要原因,只是一个建议。 初始化变量sum。它会使你的代码工作。例如sum = 0; 如果你没有初始化它,你将不会得到任何编译错误,但它指向一个内存的位置并且读取之前已经存在的东西(不是有效的数量)并将其用作总和的初始量。 所以你的数组被添加到一个无效的数额,这就是为什么你的代码不起作用。

1

传递没有任何技术问题,但在sum_arr中,
您的变量总和不是从0开始的(但有些奇怪的值)。

1

您必须将sum初始化为zero,sum_arr函数。