我最近开始大量使用数组指针,因为它简化了很多分配/释放,但是当函数的返回类型时,该类型总是由编译器引发错误。这被接受:
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] 删除。
我来说两句