【发布时间】:2019-01-03 21:16:11
【问题描述】:
我在我的代码库中遇到了这个奇怪的函数声明,希望帮助理解:
struct MemberStruct (*GetMember (
CONTAINER_STRUCT *Buffer
))[DIM_1][DIM_2][DIM_3]
{
return(&Buffer->MemberStructArray);
}
它的行为类似于伪访问器。它返回CONTAINER_STRUCT 中MemberStruct 数组的地址。
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);
我想更好地理解函数签名,但无法在网上找到此构造的任何示例。我的具体问题是:
- 函数名称后的数组维度如何工作?当函数名称介于返回类型和维度之间时,它们与返回类型有何关系?
- 为什么
*符号在函数名的括号内?既然这是返回地址,那么引用运算符不应该绑定到返回类型而不是函数名吗?
【问题讨论】:
-
The clockwise/spiral rule 总是有用的。正如cdecl.org
-
@Someprogrammerdude cdecl.org 在我尝试时对此感到震惊。但我会再次审查螺旋规则。感谢您的链接。