如何为接受函数指针的函数提供参数
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;
}
我正在尝试做这样的事情:
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;
}