函数返回的数组指针类型

时间:2021-02-28 23:47:59

标签: arrays c types

我最近开始大量使用数组指针,因为它大大简化了分配/释放,但是当它是函数的返回类型时,编译器总是会抛出错误。 这是被接受的:

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 它?

1 个答案:

答案 0 :(得分:2)

C 使用中缀表示法,正如我们从您的第一个示例中看到的:

int (*arr_ptr)[SIZE] = NULL;

正确而

int (*)[SIZE] arr_ptr = NULL;

不是。您可以通过应用相同的原理来修复功能版本:

int (*foo(void))[] {

注意。人们有时会批评中缀,说后缀更容易,但希望从这个例子中可以清楚地看出,唯一的区别是标识符的位置,事实上,将标识符放在中缀位置可以帮助您看到中间的位置:)