我需要做一个简单的事情,我过去常常用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;
}
我有一些“初始化”功能,它应该给一些分配数据的指定指针(无所谓)。我应该如何给一个函数指针,以便对这个指针进行修改,然后可以在代码中进一步使用(在该函数调用之后返回)?
答案 0 :(得分:23)
您需要调整* a指针,这意味着您需要将指针传递给* a。你这样做:
int *a;
void initArray( int **arr )
{
*arr = malloc( sizeof( int ) * SIZE );
}
int main()
{
initArray( &a );
return 0;
}
答案 1 :(得分:6)
您在arr
内分配initArray
按值,因此arr
值的任何更改都将对外界不可见。您需要通过指针传递arr
:
void initArray(int** arr) {
// perform null-check, etc.
*arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);