Инициализация указателя в отдельной функции в C

Я должен сделать простую вещь, которую я раньше делал много раз в Java, но я застреваю в C (чистый C, не C++). Ситуация похожа на это:

int *a;

void initArray( int *arr )
{
    arr = malloc( sizeof( int )  * SIZE );
}

int main()
{
    initArray( a );
    // a is NULL here! what to do?!
    return 0;
}

У меня есть некоторая функция "инициализации", которая ДОЛЖНА присвоить данную подсказку на некоторые выделенные данные (не имеет значения). Как я должен дать подсказку к функции, чтобы к этому указателю будет изменен и затем может использоваться далее в коде (после того, как тот вызов функции возвращается)?

15
задан Bo Persson 19 October 2015 в 17:09
поделиться

2 ответа

Вам нужно настроить указатель * a, это означает, что вам нужно передать указатель на * a. Это делается следующим образом:

int *a;

void initArray( int **arr )
{
    *arr = malloc( sizeof( int )  * SIZE );
}

int main()
{
    initArray( &a );
    return 0;
}
25
ответ дан 1 December 2019 в 01:45
поделиться

Вы назначаете arr по значению внутри initArray , поэтому любое изменение значения ] arr будет невидимым для внешнего мира. Вам нужно передать arr по указателю:

void initArray(int** arr) {
  // perform null-check, etc.
  *arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);
8
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: