首页 > 解决方案 > 从函数返回指向数组的指针,函数名称后具有数组维度

问题描述

我在我的代码库中遇到了这个奇怪的函数声明,我想帮助理解:

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);

我想更好地理解函数签名,并且无法在网上找到该构造的任何示例。我的具体问题是:

  1. 函数名称后的数组维度如何工作?当函数名称介于返回类型和维度之间时,它们与返回类型有何关系?
  2. 为什么*括号内的符号是函数名?既然这是返回一个地址,那么引用运算符不应该绑定到返回类型而不是函数名吗?

标签: carrayspointersreturn

解决方案


分解声明: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]

推荐阅读