在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; } 

我有一些“初始化”函数,它应该给一些指定的指针分配一些分配的数据(无关紧要)。 我应该如何给一个函数指针以便对这个指针进行修改,然后可以在代码中进一步使用(在该函数调用之后返回)?

你需要调整* a指针,这意味着你需要将指针传递给* a。 你这样做:

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

您在initArray中分配arr by-value,因此对arr值的任何更改都将对外部世界不可见。 你需要通过指针传递arr

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