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

C 正确的返回语句和函数类型,c,multidimensional-array,malloc,typedef,function-declaration,C,Multidimensional Array,Malloc,Typedef,Function Declaration,我正在试验malloc,我正在尝试创建一个动态2D数组,我知道第二维度的大小,我正在这样分配内存: int (*arr)[SIZE] = NULL; arr = malloc(sizeof(arr[SIZE]) * 10); 我的问题是,是否可以将上述代码放入一个函数中,并返回分配内存的地址,如果可以,类型应该是什么 编辑:我知道另一种分配和返回指针的方法 提前感谢。首先,malloc的论点令人困惑 arr = malloc(sizeof(arr[SIZE]) * 10); 看来你是说 ar

我正在试验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倍,在本例中是
大小的数组

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

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