【问题标题】:Passing function as argument does not work将函数作为参数传递不起作用
【发布时间】:2014-08-20 09:33:06
【问题描述】:

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

我有以下代码:

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));

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

错误:无效表达式的使用无效

这有什么问题?

【问题讨论】:

    标签: c function pointers parameters


    【解决方案1】:

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

    如果在你的函数functionToCall 中你想用state 变量调用doSomething,那么你应该这样做:

    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);    
    

    【讨论】:

    • 好的,谢谢。这就是解决方案!
    【解决方案2】:

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

    所以,这条线,

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

    必须是,

    functionToCall(2, 3, f);
    

    【讨论】:

      【解决方案3】:

      我的 C 语言不是很好,但我想你可以从以前的类似帖子中得到一些帮助

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

      希望我的回答对你有帮助

      【讨论】:

      • 谢谢。我也已经找到了这个问题。这很有帮助,但我还有一个错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2015-11-30
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多