我正在尝试将一个可变大小的2D数组传递给一个函数来打印它。但是代码并没有显示sum的确切结果。
这是代码:
#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 :(得分:1)
您应该将数组第二维的确切大小传递给函数,而不是COLL
。将其更改为m
(或n
,无论如何)
它将数字5
传递给函数,而数字应为3
:)但是,这不是您的代码不起作用的主要原因,只是一个建议。
初始化变量sum
。它将使您的代码工作。例如sum = 0;
如果你没有初始化它,你将不会得到任何编译错误,但它指向一个内存位置并读取之前存在的东西(不是有效数量)并将其用作总和的初始数量。
因此,您的数组将被添加到无效数量,这就是您的代码无效的原因。
答案 1 :(得分:1)
传球没有技术问题,但在sum_arr中,
你的变量和不是从0开始(但有些奇怪的值)。
答案 2 :(得分:1)
您必须在sum
函数中将zero
初始化为sum_arr
。