正确的 return 语句和函数类型
Proper return statement and function type
我正在试验 malloc,我正在尝试创建一个动态二维数组,我知道 第二维的大小 ,我正在这样分配内存:
int (*arr)[SIZE] = NULL;
arr = malloc(sizeof(arr[SIZE]) * 10);
我的问题是,是否可以将上面的代码放入一个函数中,return分配内存的地址,如果可以,类型应该是什么?
编辑:我知道另一种分配和 return 指向指针的指针的方法。
提前致谢。
对于初学者来说,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 倍,在本例中是 SIZE
int
.
的数组
您可以这样将此分配封装在一个函数中:
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);
}
我正在试验 malloc,我正在尝试创建一个动态二维数组,我知道 第二维的大小 ,我正在这样分配内存:
int (*arr)[SIZE] = NULL;
arr = malloc(sizeof(arr[SIZE]) * 10);
我的问题是,是否可以将上面的代码放入一个函数中,return分配内存的地址,如果可以,类型应该是什么?
编辑:我知道另一种分配和 return 指向指针的指针的方法。
提前致谢。
对于初学者来说,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 倍,在本例中是 SIZE
int
.
您可以这样将此分配封装在一个函数中:
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);
}