微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C中传递带有自己参数的函数指针

如何解决在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 举报,一经查实,本站将立刻删除。