在多个函数中使用数组

问题描述 投票:0回答:2

我有一个在函数中创建的数组,我想在不同的函数中使用它,但似乎无法弄清楚如何。

如果有帮助,这里是包含数组的函数。我想在不同的函数中使用 roll[]。

int roll_5_array(void)
{
    int i = 0, roll[5]; //Declaring array

    for (; i < 5; i = i + 1) //Repeat 5 times
    {
        int outcome = 0;
        outcome = roll_die(); //Roll die

        roll[i] = outcome;
    }

}


以我目前的知识,我只能想出几个可能的解决方案:

  • 使数组成为全局数组,这似乎是不必要和多余的。
  • 如果可能的话,将数组作为指针传递。
arrays c function pointers
2个回答
1
投票

您声明了一个具有自动存储持续时间的本地数组

int roll_5_array(void)
{
    int i = 0, roll[5]; //Declaring array

退出功能后不会存活

如果你想从函数中返回它,你需要动态分配它,例如

int * roll_5_array(void)
{
    int i = 0;
    int *roll = malloc( 5 * sizeif( int ) );

    //...
    return roll;
} 

为此,您需要包含标题

<stdlib.h>
.

您需要通过调用函数

free
使用指向分配数组的指针释放数组。

注意你的原始函数没有返回任何内容,尽管它的返回类型不是 void

int roll_5_array(void)

0
投票

你可以通过两种方式做到这一点

  1. 返回指向数组的指针
int *func(void)
{
    int *arr = malloc(5 * sizeof(*arr));
    /* ... */
    return arr;
}

int *func(void)
{
    static int arr[5];
    /* ... */
    return arr;
}

或者通过将指针传递给指针。

void func(int **ptr)
{
    int *arr = malloc(5 * sizeof(*arr));
    /* ... */
    *ptr = arr;
}

void func(int **ptr)
{
    static int arr[5];
    /* ... */
    *ptr = arr;
}
© www.soinside.com 2019 - 2024. All rights reserved.