首页 > 解决方案 > 函数返回的数组指针类型

问题描述

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

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

标签: arraysctypes

解决方案


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

int (*arr_ptr)[SIZE] = NULL;

是正确的,而

int (*)[SIZE] arr_ptr = NULL;

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

int (*foo(void))[] {

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


推荐阅读