объявление массива Dynami c в различных функциях - PullRequest
0 голосов
/ 01 мая 2020

Можно ли объявить динамический c массив в (main), но использовать mallo c внутри другой функции? Я имею в виду что-то вроде этого

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

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Да, получение указателя на указатель:

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;
}
0 голосов
/ 01 мая 2020

Да, это возможно.

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

}
void function(int **arr)
{
    .
    *arr = (int *) malloc .......
    .
}
0 голосов
/ 01 мая 2020

Да, это возможно, но не так, как вы предлагаете, но так:

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

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

А ваш ненужный (**int) приведен неверно, он должен быть (int*).

Читать также эта статья SO , которая является почти дубликатом вашего вопроса.

...