将函数中的函数指针作为参数调用

时间:2018-03-29 02:27:19

标签: c

我正在尝试调用一个函数,该函数使用指向函数的指针作为参数(比较),但我无法正确调用此函数,因为我不断收到各种警告和错误,例如,指针类型不兼容,init生成指针到没有强制转换的整数等。我是C的新手,我无法在网上找到任何对我有帮助的东西。这就是我所拥有的,我认为它非常接近,但我无法弄明白。

        int (*compare)(FRAME, FRAME) = &compareTo;
        removeNode(myQ, findNode(myQ, removeFrame,(*compare)(FRAME n, FRAME n1)));

FRAME是一种结构类型,compareTo函数比较两个FRAMES并根据比较返回一个int(1,-1,0),removeNode是一个在队列中查找节点并将其删除的函数。我没有removeNode函数,因为它来自一个锁定的头文件,所以我不能发布它。我以为我是基于其他来源正确创建它所以我认为问题出在我调用的地方?

    QueueNode *findNode(Queue *self, void *data, int (*compareTo)());
    void removeNode(Queue *self, QueueNode *p);

这就是我对这些方法的全部了解

2 个答案:

答案 0 :(得分:1)

removeNode(myQ,findNode(myQ,removeFrame,(* compare)(FRAME n,FRAME n1)));

将函数指针作为参数传递给函数时,应该只传递函数指针。但是您正在传递函数指针及其参数。应该是这样的:

removeNode(myQ,findNode(myQ,removeFrame,compare);

然后在调用函数removeNode()中,你必须调用compare指向的函数及其参数。

答案 1 :(得分:0)

如果这是你的findNode()函数:

QueueNode *findNode(Queue *self, void *data, int (*compareTo)());

你的removeNode()函数是:

void removeNode(Queue *self, QueueNode *p);

然后像你一样调用removeNode():

removeNode(myQ, findNode(myQ, removeFrame, (*compare)(FRAME n, FRAME n1)));

错了。 findNode的第三个参数是一个函数指针,你不能给它一个。你应该给第三个参数赋予你创建的函数指针"比较":

removeNode(myQ, findNode(myQ, removeFrame, compare); // compare is the function pointer