c - 从函数返回指向数组的指针,函数名称后具有数组维度
问题描述
我在我的代码库中遇到了这个奇怪的函数声明,我想帮助理解:
struct MemberStruct (*GetMember (
CONTAINER_STRUCT *Buffer
))[DIM_1][DIM_2][DIM_3]
{
return(&Buffer->MemberStructArray);
}
它的行为类似于伪访问器。它返回MemberStruct
数组中的地址CONTAINER_STRUCT
。
CONTAINER_STRUCT
有这个定义:
typedef struct ContainerStruct {
// Other members
struct MemberStruct MemberStructArray[DIM_1][DIM_2][DIM_3];
// Other members
} CONTAINER_STRUCT;
这个函数是这样调用的:
// declarations at the top of a function
struct MemberStruct (*MemberStructArray)[DIM_1][DIM_2][DIM_3];
CONTAINER_STRUCT Container;
// Other code, including the initialization of Container
MemberStructArray = GetMember(&Container);
我想更好地理解函数签名,并且无法在网上找到该构造的任何示例。我的具体问题是:
- 函数名称后的数组维度如何工作?当函数名称介于返回类型和维度之间时,它们与返回类型有何关系?
- 为什么
*
括号内的符号是函数名?既然这是返回一个地址,那么引用运算符不应该绑定到返回类型而不是函数名吗?
解决方案
分解声明:GetMember
是一个函数:
GetMember()
这需要一个类型的参数CONTAINER_STRUCT *
:
GetMember(CONTAINER_STRUCT *)
并返回一个指针:
*GetMember(CONTAINER_STRUCT *)
对于 3D 数组:
(*GetMember(CONTAINER_STRUCT *))[DIM_1][DIM_2][DIM_3]
struct MemberStruct
: _
struct MemberStruct (*GetMember(CONTAINER_STRUCT *))[DIM_1][DIM_2][DIM_3]
推荐阅读
- python - DjangoRestFramework 再次下载最新的 Django
- php - 如何将具有相同组 IS 作为外键的行分组?
- javascript - express.static(path.join()) 不工作
- php - PHP:每5个单词后将单词从数组添加到字符串
- amazon-web-services - aws cli 可以列出没有给定服务描述的可用命令吗?
- javascript - 在 Ant Design pro 表中动态更改按钮颜色
- reactjs - 如何在 React 组件中使用多个传播道具?
- excel - 从另一个工作簿 VBA 导入数据
- java - 使用 KeyListener 从键盘单击 JButton
- angularjs - 角度混合应用程序,页面刷新时延迟加载的模块不起作用