【问题标题】:How to pass multi-dimensional array to function?如何将多维数组传递给函数?
【发布时间】:2014-02-28 21:12:31
【问题描述】:

我正在尝试将一个可变大小的二维数组传递给一个函数来打印它。但是代码没有显示 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

请告诉我代码有什么问题......

【问题讨论】:

  • 尝试初始化sum=0
  • pointer_multi_array.c:15:21:错误:此处未声明“n”(不在函数中)pointer_multi_array.c:在函数“main”中:pointer_multi_array.c:42:2:错误:类型形式参数 1 的不完整当我将数组的大小更改为 n 时出现上述错误

标签: c arrays function multidimensional-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过没有技术问题,但是在sum_arr中,
    您的变量 sum 不是从 0 开始(而是一些奇怪的值)。

    【讨论】:

      【解决方案3】:

      您必须在sum_arr 函数中将sum 初始化为zero

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 2023-03-06
        • 2018-07-10
        • 2017-07-15
        • 2021-03-12
        相关资源
        最近更新 更多