arrays - 函数返回的数组指针类型
问题描述
我最近开始大量使用数组指针,因为它大大简化了分配/解除分配,但是当它是函数的返回类型时,编译器总是会抛出错误。这是被接受的:
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 使用中缀表示法,正如我们从您的第一个示例中看到的那样:
int (*arr_ptr)[SIZE] = NULL;
是正确的,而
int (*)[SIZE] arr_ptr = NULL;
不是。您可以通过应用相同的原理来修复函数版本:
int (*foo(void))[] {
注意。人们有时会批评中缀,说后缀更容易,但希望从这个示例中可以清楚地看出,唯一的区别是标识符的位置,事实上,将标识符放在中缀位置可以帮助您了解中间在哪里:)
推荐阅读
- encryption - CCCrypt 返回 nil 的最长时间。加密有什么问题
- javascript - API路由控制器中的套接字连接保留先前调用的数据
- postgresql - postgres 立方体欧式距离查询性能问题
- python-3.x - 销毁前一个窗口后如何激活 tkinter 窗口?
- javascript - 我的 javascripts 结果在显示 Javascripts 结果的表单元素上迭代后仅显示一次
- c - 只用掩码改变一些位
- python - 使用 pandas-0.24.2 面临奇怪的问题
- c# - 我的异步 lambda 在缓存模式中的使用是否正确?
- javascript - 如何在 CSS 和 Javascript 中为网格区域设置动画?
- java - 如何在循环中访问对象?