【发布时间】:2021-05-30 13:24:36
【问题描述】:
我最近开始大量使用数组指针,因为它大大简化了分配/解除分配,但是当它作为函数的返回类型时,编译器总是会抛出错误。 这是被接受的:
int (*arr_ptr)[SIZE] = NULL;
但这不是:
int (*)[] foo(void) {
return NULL;
}
编译器抛出此错误:
src/main.c:51:7: error: expected identifier or ‘(’ before ‘)’ token
51 | int (*)[] foo(void) {
| ^
目前我只是 typedef 类型并且它可以工作:
typedef int(*tdarr_ptr_int)[];
tdarr_ptr_int foo(void) {
return NULL;
}
但这对我来说不是一个合适的长期解决方案,我怎样才能指定这个返回类型而不必 typedef 呢?
【问题讨论】:
-
您不能在 C 中返回数组。不过,您可以返回指针或结构,或者只是将数组(可能是 VLA)作为函数参数传递。
-
typedef 是一个很好的解决方案,不清楚为什么你会认为它不如替代方案合适
-
@Bob__ 我正在返回一个指针,一个指向数组的指针。
-
@MM 因为我可以只输入
int(*arr)[SIZE] = malloc(sizeof(int)*SIZE*SIZE);,它给了我一个 SIZE * SIZE 的二维数组,就像你用int arr[SIZE][SIZE];定义一个数组一样,但现在它被分配了,并且可以用一个函数返回它,然后用一个 free 来释放它,并且不必制作一个数组数组,这在更高维度上释放是很痛苦的。 -
@M.M Hoooo 我明白了,是的,我会这样做,所以如果我理解正确,我会输入类似:
arr_t* foo(void);?