gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:18:59 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

关于c - 从具有函数名称后的数组维度的函数返回指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com