将数组传递给函数,file.exe停止工作

时间:2016-04-13 19:29:19

标签: c multidimensional-array

我是C的完全初学者,我正在练习将数组传递给函数。我编写了一个程序,将二维数组作为输入,找到各列的总和。 当我编译程序时,我没有错误,但是一旦我运行它,我得到一个对话框,说“untitled5.exe停止工作”,其中untitled5是文件名。 我有这个错误很多次了。我使用了dev c ++和codeblocks来编译我的程序,那么这是什么原因呢?这是我的代码或我的编译器或我的笔记本电脑的问题吗?

#include<stdio.h>
void summation (int arr[][5], int size);
int main()
{
    int n,arr[n][5],sum,i,j;
    printf("enter the number of rows");
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        for (j=0;j<5;j++)
    {
        printf("%d,%d th element is",i,j);
        scanf("%d",&arr[i][j]);
    }
    }
    summation (arr,5);
    return 0;
}
void summation (int arr[][5], int size)
{
    int i,j,s=0;
    for(j=0;j<5;j++)
    {

        for (i=0;i<5;i++)
        {
            s=s+arr[i][j];
        }
        printf("%d",s);
    }

}

2 个答案:

答案 0 :(得分:0)

main()中,您使用i索引数组的第一个维度。在summation()中,您使用i来索引数组的第二维。我认为当summation()没有填满数组时(例如,当您为行数输入2时),您将超出main()内第一维的末尾。

我想你想要

summation (arr,5);

而且,在summation()内:

for (i=0;i<size;i++)
{
   s=s+arr[i][j];
}

答案 1 :(得分:0)

#include<stdio.h>
void summation (int arr[][5], int size, int rows);
int main()
{
    int n, sum, i, j;
    printf("enter the number of rows");
    scanf("%d",&n);
    int arr[n][5];
    for (i=0;i<n;i++)
    {
        for (j=0;j<5;j++)
    {
        printf("%d,%d th element is",i,j);
        scanf("%d",&arr[i][j]);
    }
    }
    summation (arr, 5, n);
    return 0;
}
void summation (int arr[][5], int size, int rows)
{
    int i,j,s=0;
    for(i=0;i<rows;j++)
    {

        for (j=0;i<size;i++)
        {
            s=s+arr[i][j];
        }
    }
    printf("%d",s);    
}

首先,在初始化n并使其等于某事之后,我将数组声明移动到了。

然后你的下一个问题是你可能在你的求和函数中超出界限。您的2darray中总是有5列,但您可以拥有不同的行数。将行数n传递给函数求和,以确保不会超出界限。