16

我需要做一件简单的事情,我曾经在 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;
}

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

4

2 回答 2

27

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

int *a;

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

int main()
{
    initArray( &a );
    return 0;
}
于 2010-03-21T06:41:15.590 回答
8

您在arr内部按值分配initArray,因此对 的值的任何更改对arr外界都是不可见的。您需要arr通过指针传递:

void initArray(int** arr) {
  // perform null-check, etc.
  *arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);
于 2010-03-21T06:41:25.823 回答