如何在C函数全局函数中创建我的数组?

时间:2017-11-11 18:44:08

标签: c arrays variables global local

void enterTwoArrays()
{
    printf("Enter m!\n");
    scanf("%d",&m);
    printf("Enter n!\n");
    scanf("%d",&n);
    int arr[m][n];

    printf("Enter m2!\n");
    scanf("%d",&m2);
    printf("Enter n2!\n");
    scanf("%d",&n2);
    int arr2[m2][n2];

    for(i=0; i<=m-1; i++)
    {
        for(j=0; j<=n-1; j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }

    for(i=0; i<=m2-1; i++)
    {
        for(j=0; j<=n2-1; j++)
        {
            scanf("%d",&arr2[i][j]);
        }
    }
}

void addition(int arr[m][n], int arr2[m2][n2])
{
    int arr3[m][n];
    for(i=0; i<=m-1; i++)
    {
        for(j=0; j<=n-1; j++)
        {
            arr3[i][j]=arr[i][j]+arr2[i][j];
        }
    }
}
嘿,我确实有问题。我在C中得到了这两个函数。想法是在第一个函数中我将创建并填充数组。第二个函数将添加两个数组的值。但是,当我尝试时,程序粉碎。我想我知道问题在哪里。它因为我的阵列是本地的,我不能将它们从主要发送到第二个功能。那么我该如何解决这个问题呢?我不能在main / be4 main之前声明这些数组,而不知道n和m变量。

1 个答案:

答案 0 :(得分:0)

您可以全局声明指针,并在从用户获取行和列后分配内存。这里我为两个矩阵采用了相同的行和列,因为这是添加矩阵的必要条件。

#include<stdio.h>
#include<stdlib.h>

int *arr;
int *arr2;
int row;
int col;
void enterTwoArrays()
{
    int i,j,t=0;
    printf("Enter rows!\n");
    scanf("%d",&row);
    printf("Enter cols!\n");
    scanf("%d",&col);

    arr=(int*)malloc(row *col *sizeof(int));
    arr2=(int*)malloc(row *col *sizeof(int));

    printf("Enter the first matrix:\n");

    for(i=0; i<(row*col); i++)
    {
        scanf("%d",(arr+i));
    }

    printf("Enter the second matrix:\n");
    for(i=0; i<(row*col); i++)
    {
        scanf("%d",(arr2+i));
    }

}

void addition(int *arr, int *arr2)
{
    int *arr3;
    int i;

    arr3=(int*)malloc(row*col*sizeof(int));

    for(i=0; i<row*col; i++)
    {
        *(arr3+i)=*(arr+i)+*(arr2+i);
    }

    printf("The matrix after addition is: \n");
    int j,t=0;

    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++,t++)
        {
            printf("%d ",*(arr3+t));
        }
        printf("\n");
     }
}

void main()
{
    enterTwoArrays();
    addition(arr,arr2);
}