c-正确的返回语句和函数类型



我正在试验malloc,并试图创建一个动态2D阵列,我知道第二维度的大小,我正在分配内存,如下所示:

int (*arr)[SIZE] = NULL;
arr = malloc(sizeof(arr[SIZE]) * 10);

我的问题是,是否可以将上面的代码放入一个函数中,并返回分配内存的地址,如果可以,类型应该是什么?

编辑:我知道另一种分配和返回指向指针的指针的方法。

提前谢谢。

对于初学者来说,malloc的参数会混淆

arr = malloc(sizeof(arr[SIZE]) * 10);

你的意思似乎是

arr = malloc(sizeof( *arr ) * 10);

也就是说,您正在尝试动态分配一个类型为int[10][SIZE]的数组。

更确切地说,在malloc 的调用中用作参数的记录

arr = malloc(sizeof(arr[SIZE]) * 10);

是正确的,但非常令人困惑。sizeof运算符最好不要使用这样的记录。

函数声明可以看起来像

int ( *allocation( size_t n ) )[SIZE];

或者你可以引入一个typedef名称,比如

typedef int ( *Array2D )[SIZE];

然后像一样声明函数

Array2D allocation( size_t n );

其中n对应于您使用的值10。也就是说,使用该参数,您可以为数组维度指定除10以外的任何数字。

分配大小sizeof(arr[SIZE]) * 10不正确,但会巧合地计算为预期大小。它应该是sizeof(*arr) * 10,这意味着arr所指向的大小的10倍,在本例中是SIZEint的数组。

您可以通过以下方式将此分配封装在一个函数中:

int (*allocate2D(size_t n))[SIZE] {
int (*arr)[SIZE] = malloc(sizeof(*arr) * n);
return arr;
}

或者更好:

int (*allocate2D(size_t n))[SIZE] {
return calloc(sizeof(int[SIZE]), n);
}

相关内容

  • 没有找到相关文章

最新更新