猿问

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

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

我有一些“初始化”函数,它应该为一些分配的数据指定一个给定的指针(不重要)。如果要修改指向这个指针的指针,那么我应该如何给出一个函数的指针,然后在代码中进一步使用(在函数调用返回之后)?


阿波罗的战车
浏览 473回答 3
3回答

一只甜甜圈

您需要调整*a指针,这意味着您需要传递一个指向*a的指针。int *a;void initArray( int **arr ){     *arr = malloc( sizeof( int )  * SIZE );}int main(){     initArray( &a );     return 0;}

临摹微笑

你在分配arr内边值initArray的值的任何变化。arr外面的世界是看不见的。你得通过arr指针:void initArray(int** arr) {   // perform null-check, etc.   *arr = malloc(SIZE*sizeof(int));}...initArray(&a);

沧海一幻觉

或者(以及更好的国际水文学组织)int *initArray(size_t s) { return malloc(sizeof(int) * s); }然后用它作为int *arr = initArray(SIZE);
随时随地看视频慕课网APP
我要回答