Inicializando un puntero en una función separada en C

Necesito hacer algo simple, que solía hacer muchas veces en Java, pero estoy atrapado en C (C puro, no C ++). La situación se ve así:

int *a; void initArray( int *arr ) { arr = malloc( sizeof( int ) * SIZE ); } int main() { initArray( a ); // a is NULL here! what to do?! return 0; } 

Tengo alguna función de “inicialización”, que DEBERÍA asignar un puntero dado a algunos datos asignados (no importa). ¿Cómo debería dar un puntero a una función para que este puntero se modifique y luego se pueda utilizar más en el código (después de que vuelva la llamada a la función)?

Debe ajustar * un puntero, esto significa que debe pasar un puntero al * a. Lo haces así:

 int *a; void initArray( int **arr ) { *arr = malloc( sizeof( int ) * SIZE ); } int main() { initArray( &a ); return 0; } 

Estás asignando arr -value dentro de initArray , por lo que cualquier cambio en el valor de arr será invisible para el mundo exterior. arr pasar arr puntero:

 void initArray(int** arr) { // perform null-check, etc. *arr = malloc(SIZE*sizeof(int)); } ... initArray(&a);