gpt4 book ai didi

c - 传递函数指针的参数

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:06 24 4
gpt4 key购买 nike

我应该通过哈希表(指向数据链接列表的指针数组)和一些支持函数(即插入元素、删除表...我已经成功编写了 C++ STL 容器映射(关联数组)的 C 实现所有这些,除了一个,它是 foreach(table, function_ptr) 函数,它为表中的所有数据调用传递的函数(打印内容...)。

我有点卡在这里,因为我无法弄清楚应该将哪些参数传递给function_ptr,所以它是通用的。至于现在,我认为这是不可能的。

如果我只想传递一个指针给 printf,那会很简单,foreach 的原型(prototype)看起来像这样

foreach(table_t *t, int (*function_ptr)(const char *fmt, ...))

我会像这样为每个数据节点调用它

function_ptr("%s, %d\n", node.key, node.data)

但是如果有一天我使用它并改变主意,我想传递我自己的函数,我将不得不更改调用函数的代码和 foreach 函数。

有什么简单的方法可以做这样的事情吗?

最佳答案

指定“任何参数类型”的常规方法是使用 void *,如下所示:

foreach(table_t *t, int (*function_ptr)(void *p))

然后你可以传递每个参数的地址(可以是复杂的数据类型,比如结构),函数可以将它转换回合适的类型:

struct {
int x;
int y;
} numbers;

// Sums the numbers in a structure
int sum(void *p) {
numbers *n = (numbers *) p; // Cast back to the correct type
return n->x + n->y;
}

// Counts the number of 'a' chars in a string
int numberOfA(void *p) {
char *s = (char *) p;
int num = 0;
while (s != NULL && *s != '\0') {
if (*s == 'a') {
++num;
}
}
}

关于c - 传递函数指针的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270104/

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