如何为接受函数指针的函数提供参数

How do I give arguments to a function that accepts function pointer

我正在尝试做这样的事情:

void print (int number)
{
    printf("Argument \"%i\" has been given", number);
}

void foo (void (*ptr)(int arg))
{
    ptr(arg);
}

int main (void)
{
    foo(print(10));

    return 0;
}

这不太可能奏效,因为 print(10) 应该 return 无效,而不是实际的函数地址..但至少我希望我的问题是可以理解的,因为我很难解释它用平实的话。


如何在这样的函数指针中传递参数?

你不能"transfer arguments in a function pointer like that"。你可以做的是传递一个额外的参数来匹配你的函数指针期望的参数。

这看起来像这样:

void print (int number)
{
    printf("Argument \"%i\" has been given", number);
}

void foo (void (*ptr)(int), int arg) // the new argument is here.
{
    ptr(arg);
}

int main (void)
{
    foo(print, 10);

    return 0;
}

备选

我们在这里做的是将参数和函数指针打包在一个结构中,并将这个结构传递给foo()。 这有点类似于 c++ 的 std::bind 但简化且功能较弱。

typedef struct bind_s
{
  void (*ptr)(int);
  int arg;
} bind_t;

void print (int number)
{
  printf("Argument \"%i\" has been given", number);
}

void foo (bind_t call)
{
  call.ptr(call.arg);
}

int main (void)
{
  bind_t call = {print, 10};
  foo(call);

  return 0;
}