在C中传递函数作为参数

时间:2013-07-19 12:39:07

标签: c pointers arguments function-pointers

有时,为什么我们将函数的地址作为参数传递给C? 为什么我们不直接使用该功能? 我在使用BST的ADT时遇到了这样的代码

4 个答案:

答案 0 :(得分:1)

这样你就可以传递不同的函数,以改变行为,比如多态,但没有带有虚方法的类或其他技巧。

答案 1 :(得分:0)

  

功能指针的好处:

     
      
  • 函数指针提供了一种传递指令的方法
  •   
  • 您可以编写灵活的函数和库,允许程序员通过将函数指针作为参数传递来选择行为
  •   
  • 这种灵活性也可以通过使用具有虚函数的类来实现
  •   

(来自cprogramming.com

答案 2 :(得分:0)

获取指向另一个函数作为参数的指针的函数可以回调参数函数来执行一些重复操作。因此名称回调函数。该函数变得更加通用,因为当您切换回调实现时它可以做不同的事情。例如,在Windows GUI编程中,当您注册一个回调函数时,如果有一个窗口要处理的消息,就像点击按钮一样,它将被调用。

答案 3 :(得分:0)

这个问题的答案可能需要解释函数指针的用法/优点。

案例1:非阻止API

让我们说目标是开发一个通用模块,它可以对文件进行一些网络下载,并将输出缓冲区提供给调用者。为了达到这个目的,为应用程序提供非阻塞API更有意义,如下所示

/* Prototype of the download callback passed as argument */
  typedef int (*app_download_cbk)(char *out_buffer, unsigned int ui_buffer_length);

/* Asynchronous API to download a file */
  int download_file(const char *URI, app_dwnload_callbask app_cbk);

在这种情况下,应用程序可以调用API download_file并执行自己的操作。每当下载完成后,模块将通过您在download_file的API调用期间注册的回调通知应用程序

案例2:模块的通用实施

让我们说目标是开发一个通用模块,它可以对数据库进行一些查询并将数据提供给应用程序。在这种情况下,应用程序可以根据需要执行任何操作。因此,您可以设计一个接受函数指针的API。因此模块可以通过回调传递查询结果,应用程序可以根据需要处理这些结果。