在C中的单独函数中初始化指针

时间:2010-03-21 06:38:33

标签: c pointers initializing

我需要做一个简单的事情,我过去常常用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;
}

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

2 个答案:

答案 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);