在 C 中传递带有自己参数的函数指针
Passing a function pointer with it's own parameters in C
#include <stdio.h>
void runner(void (* function)(int in)){
(*function)(in);
}
void print(int in){
printf("%d\n", in);
}
int main(){
//
return 0;
}
以上代码未编译并显示此错误:'in' undeclared
.
像这样需要单独传一个function pointer
的参数吗?
void runner(void (* function)(int), int in){
(*function)(in);
}
即从语法的角度来看,有没有办法一次传递函数指针和它的参数?
是的。
从函数类型声明类型时,参数名称将被忽略。
因此定义等同于:
void runner(void (* function)(int)){
(*function)(in);
}
并且标识符 in
确实未声明。
传递带有某些参数的函数将形成 C 本身不支持的闭包。
另外,GCC 支持嵌套函数的扩展,可以访问嵌入函数的自动变量。
void runner(void (* function)()){
function();
}
int main(){
int in = 10;
void print(){
printf("%d\n", in);
}
runner(print);
return 0;
}
参数未传递。传递的是参数。
所以这个函数声明
void runner(void (* function)(int in)){
(*function)(in);
}
只有一个参数:指向函数的指针,但是如果你想调用需要参数的指向函数,那么你需要提供一个参数。
在此函数指针的声明中
void (* function)(int in)
函数参数in
具有函数原型作用域..
你可以像
一样在没有标识符的情况下声明函数参数
void (* function)(int)
所以你必须用两个参数声明函数,比如
void runner(void (* function)(int), int in ){
function(in);
}
注意取消引用指向函数的指针是多余的。
例如所有这些调用
( *function )( int );
或
( *****function )( in );
相当于
function( in );
#include <stdio.h>
void runner(void (* function)(int in)){
(*function)(in);
}
void print(int in){
printf("%d\n", in);
}
int main(){
//
return 0;
}
以上代码未编译并显示此错误:'in' undeclared
.
像这样需要单独传一个function pointer
的参数吗?
void runner(void (* function)(int), int in){
(*function)(in);
}
即从语法的角度来看,有没有办法一次传递函数指针和它的参数?
是的。
从函数类型声明类型时,参数名称将被忽略。 因此定义等同于:
void runner(void (* function)(int)){
(*function)(in);
}
并且标识符 in
确实未声明。
传递带有某些参数的函数将形成 C 本身不支持的闭包。
另外,GCC 支持嵌套函数的扩展,可以访问嵌入函数的自动变量。
void runner(void (* function)()){
function();
}
int main(){
int in = 10;
void print(){
printf("%d\n", in);
}
runner(print);
return 0;
}
参数未传递。传递的是参数。
所以这个函数声明
void runner(void (* function)(int in)){
(*function)(in);
}
只有一个参数:指向函数的指针,但是如果你想调用需要参数的指向函数,那么你需要提供一个参数。
在此函数指针的声明中
void (* function)(int in)
函数参数in
具有函数原型作用域..
你可以像
一样在没有标识符的情况下声明函数参数void (* function)(int)
所以你必须用两个参数声明函数,比如
void runner(void (* function)(int), int in ){
function(in);
}
注意取消引用指向函数的指针是多余的。
例如所有这些调用
( *function )( int );
或
( *****function )( in );
相当于
function( in );