在不同函数中进行动态数组声明

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

是否可以在(main)中声明一个动态数组,但在另一个函数中使用malloc?我的意思是像这样

.
.
int main(void)
{
    .
    .
    int **array;
    .
    .
}
void function(int **arr)
{
    .
    array = (**int) malloc .......
    .
}
c dynamic-arrays
1个回答
0
投票

是的,这是可能的,但不是像你建议的那样,而是像这样。

int main(void)
{
    .
    int *array;
    function(&array);
    .
}

void function(int **arr)
{
    .
    *array = malloc(..)  // no cast is needed here
    .
}

而你不需要的 (**int) 错,应该是 (int*).

还请阅读 本篇 这几乎是你问题的重复。


0
投票

是的,是可以这样的。

int main(void)
{
    int *array;
      function(&array);

}
void function(int **arr)
{
    .
    *arr = (int *) malloc .......
    .
}

0
投票

是的,接收一个指向指针的指针。

void function(int **array, size_t elements)
{
    *array = malloc(sizeof(int) * elements);
    if (*array == NULL)
    {
        // raise error
    }
}

int main(void)
{
    int *array;

    function(&array, 10);
    return 0;
}

另一个选择是返回函数中的地址(分配的空间)。

int *function(size_t elements)
{
    int *array = malloc(sizeof(int) * elements);

    if (array == NULL)
    {
        // raise error
    }
    return array;
}

int main(void)
{
    int *array = function(10);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.