将函数作为参数传递不起作用

时间:2014-08-20 09:33:07

标签: c function pointers parameters

我想将一个函数作为参数传递给另一个函数。我已经在谷歌上搜索过有关这方面的信息,我发现已经有了解释,但它对我不起作用,我不知道为什么。

我有以下代码:

void doSomething(uint64_t *);

这是我想传递的功能。

int functionToCall(int x, int y, void (*f)(uint64_t *));

这是我要调用的函数并传递doSomething()函数。

现在我的代码是:

uint64_t *state = malloc(sizeof(uint64_t) * 10);
void (*f)(uint64_t *) = doSomething;
functionToCall(2, 3, f(state));

如果我现在编译上面的代码,我总是得到:

  

错误:无效使用void表达式

有什么问题?

3 个答案:

答案 0 :(得分:5)

错误来自于你没有传递指向函数的指针而是函数的结果(无效)。

如果您在函数functionToCall中想要使用doSomething变量调用state,那么您应该执行以下操作:

void doSomething(uint64_t *);
int functionToCall(int x, int y, unint64_t * state, void (*f)(uint64_t *))
{
    f(state);

    /* ... */
}

uint64_t *state = malloc(sizeof(uint64_t) * 10);
void (*f)(uint64_t *) = doSomething;
functionToCall(2, 3, state, f);    

答案 1 :(得分:1)

我没有意识到我在doSomething()函数中传递了functionToCall函数的参数。

所以,行,

functionToCall(2, 3, f(state));

一定是,

functionToCall(2, 3, f);

答案 2 :(得分:-1)

我在C中表现不佳,但我想你可以从以前的类似帖子中获得一些帮助

How do you pass a function as a parameter in C?

希望我的答案有所帮助