如何解决在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 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 );
,
是的。
从函数类型声明类型时,参数名称将被忽略。 因此定义等价于:
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。