函数返回的数组指针类型

巴蒙坦

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

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使用infix表示法:

int (*arr_ptr)[SIZE] = NULL;

是正确的,而

int (*)[SIZE] arr_ptr = NULL;

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

int (*foo(void))[] {

注意 人们有时会批评infix,说postfix更容易,但是希望从此示例中可以清楚地看到,唯一的区别是标识符的位置,实际上,将标识符放在infix位置可以帮助您了解中间位置:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章