gpt4 book ai didi

调用函数指针(语法)

转载 作者:行者123 更新时间:2023-11-30 15:15:00 27 4
gpt4 key购买 nike

假设我有一个接受这些参数的函数。

int create(Ptr * p,void * (*insert)(void *, void *)) {

//return something later
}

结构:

typedef struct {
void ** ptr;
void * (*insert)(void *, void *));
}Ptr;

其中 p 是指向结构的指针,insert 是指向具有两个通用指针(空指针)的函数的函数指针,用于在给定树中插入整数(我使用空指针,因为在本例中它是一个整数,在其他情况下可能不是)。

我该如何在这里调用函数create?

我知道我可以对第一个参数做一些类似的事情:

//在单独的.c文件中

Ptr * pt;
pt = malloc(sizeof(Ptr));

create(pt,....what to put here)?

如果我想传递结构指针作为参数,然后传递一个要插入的整数(同样,它们都是空指针,因为它是通用构建)。

最佳答案

在该函数内,您可以编写以下任一内容:

insert(vp1, vp2);

或者:

(*insert)(vp1, vp2);

我假设:

void *vp1 = …;
void *vp2 = …;

第二种是C89/C90标准之前必需的形式;你会发现像我这样的老顽固仍然更喜欢它。第一个是自标准的第一个版本发布以来的标准,但是您必须查看函数的参数列表才能发现 insert 是指向函数的指针而不是函数的名称。这就是为什么我仍然更喜欢旧的表示法。

要实际调用该函数,您只需提供与 insert 函数指针的签名相匹配的函数名称即可:

extern void *insert_int(void *vp1, void *vp2);

if (create(pt, insert_int) != 0)
…handle error…

关于调用函数指针(语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33793321/

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