C 从函数名后带有数组维度的函数返回指向数组的指针
我在代码库中遇到了这个奇怪的函数声明,我想帮助理解:C 从函数名后带有数组维度的函数返回指向数组的指针,c,arrays,pointers,return,C,Arrays,Pointers,Return,我在代码库中遇到了这个奇怪的函数声明,我想帮助理解: struct MemberStruct (*GetMember ( CONTAINER_STRUCT *Buffer ))[DIM_1][DIM_2][DIM_3] { return(&Buffer->MemberStructArray); } 它的行为类似于伪访问器。它返回CONTAINER\u STRUCT中MemberStruct数组的地址 CONTAINER\u STRUCT具有以下定义: ty
struct MemberStruct (*GetMember (
CONTAINER_STRUCT *Buffer
))[DIM_1][DIM_2][DIM_3]
{
return(&Buffer->MemberStructArray);
}
它的行为类似于伪访问器。它返回CONTAINER\u STRUCT
中MemberStruct
数组的地址
CONTAINER\u 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\u STRUCT*
的参数:
GetMember(CONTAINER_STRUCT *)
并返回一个指针:
*GetMember(CONTAINER_STRUCT *)
要创建三维阵列,请执行以下操作:
(*GetMember(CONTAINER_STRUCT *))[DIM_1][DIM_2][DIM_3]
结构成员结构的
struct MemberStruct (*GetMember(CONTAINER_STRUCT *))[DIM_1][DIM_2][DIM_3]
谢谢你的帮助。我想任何后续问题的答案都是“因为C就是这样”。这是“到3D阵列”的一部分,让我很反感。对于我来说,数组维度在括号外和函数名右侧没有意义。这看起来像是指向我的函数指针数组。@skrrgwasme:如果
a[N]
是数组,那么*ap[N]
是指针数组,(*pa)[N]
是指向数组的指针。将pa
替换为f()
,您将得到(*f())[N]
,或者一个返回数组指针的函数。是的,这就是C声明程序语法的工作原理。函数声明符语法类似-如果f()
是函数,则*fp()
是返回指针的函数,(*pf)(
是指向函数的指针。将pf
替换为a[N]
,您就有了一个指向函数的指针数组-(*a[N])()
。知道总是有用的。正如@Someprogrammerdude cdecl.org在我尝试的时候被堵住了一样。但我会再复习一下精神法则。谢谢你的链接。