gpt4 book ai didi

c - 使用函数指针作为方法参数

转载 作者:行者123 更新时间:2023-12-02 09:03:35 25 4
gpt4 key购买 nike

我正在尝试使用函数指针来提高我的代码效率。但是,我对这个概念很陌生,并且在将其用作另一个函数中的参数时遇到了麻烦。

这会给出错误“从不兼容的指针类型初始化”。有人可以告诉我我做错了什么以及我应该做什么吗?

最佳答案

当你这样做时:

traverse(node, h, print(node, h));

您实际上是在尝试调用 print 而不是传递指向它的指针。因此,您传递给 traverse 的实际上是 print 的返回值,而不是指向它的指针。

正确的调用如下所示:

traverse(node, h, print);

然后在 traverse 内部调用回调:

void traverse(node_t *node, void *param, func_t func)
{
...
func(node,param);
...
}

但是仍然有一个问题。函数 print 的类型与函数指针 func_t 不兼容。前者采用 FILE * 作为其第一个参数,而后者采用 void * 作为其第二个参数。仅当它是转换的源或目标时,与 void * 之间的隐式转换才有效。它不适用于函数参数。

假设您需要回调来处理各种不同的类型,您可以更改 print 函数以接受 void * 并转换函数内部的参数。

void print(node_t *node, void *param)
{
FILE *f = param; // no cast needed
...

关于c - 使用函数指针作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61061965/

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