【问题标题】:Initializing a pointer in a separate function in C在C中的单独函数中初始化指针
【发布时间】:2011-01-29 23:36:46
【问题描述】:

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

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

【问题讨论】:

    标签: c pointers initializing


    【解决方案1】:

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

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

    【讨论】:

    • 或者(更好的恕我直言)int *initArray(size_t s) { return malloc(sizeof(int) * s); },然后将其用作int *arr = initArray(SIZE);
    • 克里斯,我不应该这样做,因为这个例子有点不自然。我实际情况下的“initArray”函数返回一个值,所以我不能使用它。但无论如何还是谢谢 :)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多