我想将一个函数作为参数传递给另一个函数。我已经在谷歌上搜索过有关这方面的信息,我发现已经有了解释,但它对我不起作用,我不知道为什么。
我有以下代码:
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表达式
有什么问题?
答案 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)