从函数名称后面具有数组维数的函数返回指向数组的指针

时间:2018-07-26 19:27:37

标签: c arrays pointers return

我在代码库中遇到了这个奇怪的函数声明,希望对您有所帮助:

struct MemberStruct (*GetMember ( 
    CONTAINER_STRUCT *Buffer 
    ))[DIM_1][DIM_2][DIM_3]
{
  return(&Buffer->MemberStructArray);
}

它的行为类似于伪访问器。它返回MemberStructCONTAINER_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. 为什么括号中的*符号带有函数名?由于这是返回地址,因此引用运算符不应该绑定到返回类型而不是函数名称吗?

1 个答案:

答案 0 :(得分:3)

破坏声明: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]