【问题标题】:How do I make my array made in function global in C?如何在 C 中使我的数组在函数中全局化?
【发布时间】:2017-11-11 18:44:08
【问题描述】:
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 发送到第二个函数。那么我该如何解决这个问题呢?在不知道 n 和 m 变量的情况下,我无法在 main/be4 main 中声明这些数组。

【问题讨论】:

  • 您可以将指针传递给数组。
  • 将指向数组的指针作为参数传递给函数。
  • 我看不出您的代码本身有什么问题,但它确实取决于m2n2 至少分别与mn 一样大。如果在给定的运行中不是这种情况,则函数addition() 将尝试在其边界之外访问arr2。也许您应该只读取一组常见的维度,并将其用于两个数组。
  • 更正:您确实有一个错误,但它与将数组传递给addition() 无关。在输入数组arr2 的元素的地方,您将传递数组元素,而不是传递指向它们的指针。即scanf("%d",arr2[i][j]); --> scanf("%d",&amp;arr2[i][j]);
  • 一方面,您不能将函数中定义的数组变成全局变量。除此之外,为数组分配的存储空间在函数返回时被释放,并被其他函数重用。此外,您不能在全局范围内拥有可变长度数组。不清楚你甚至可以在全局范围内拥有指向可变长度数组的指针——我认为不能。

标签: c arrays variables global local


【解决方案1】:

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

#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);
}

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多