调用函数指针(语法)

标签 c function pointers struct

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

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/

相关文章:

c - 使用静态函数的正确方法是什么?

javascript - 调用 OnChange 时运行 jquery 函数

c - 在memcached中存储指针

无法在 C 程序中打开 16 个文件(核心转储)

c - #define 命令的奇怪行为

c++ - 引用函数 "int &foo();"是如何工作的?

c - 指针及其取消引用的方法

C - 以相同方式对两个数组进行排序

有人可以向我解释这段代码吗?

C: 使用 Fork() 和 Pipe() 在子进程中添加数字