如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。例如qsort(3)bsearch(3)

表24.7.回调函数示例:void func(void (*f)(void *), void *p);

调用者 实现者
  1. 提供一个回调函数,再提供一个准备传给回调函数的参数。

  2. 把回调函数传给参数f,把准备传给回调函数的参数按void *类型传给参数p

  1. 在适当的时候根据调用者传来的函数指针f调用回调函数,将调用者传来的参数p转交给回调函数,即调用f(p);


以下是一个简单的例子。实现了一个repeat_three_times函数,可以把调用者传来的任何回调函数连续执行三次。

例24.7.回调函数

/* para_callback.h */
#ifndef PARA_CALLBACK_H
#define PARA_CALLBACK_H

typedef void (*callback_t)(void *);
extern void repeat_three_times(callback_t, void *);

#endif
/* para_callback.c */#include "para_callback.h"void repeat_three_times(callback_t f, void *para){     f(para);     f(para);     f(para);}
/* main.c */#include <stdio.h>#include "para_callback.h"void say_hello(void *str){     printf("Hello %s/n", (const char *)str);}void count_numbers(void *num){     int i;     for(i=1; i<=(int)num; i++)  printf("%d ", i);     putchar('/n');}int main(void){     repeat_three_times(say_hello, "Guys");     repeat_three_times(count_numbers, (void *)4);     return 0;}

更多相关文章

  1. c中变参函数的理解和编写(hello world引发的思考)
  2. 浅谈Oracle函数返回Table集合
  3. Linux-C语言函数手册
  4. Linux 下nice 函数用法提高一个进程的友善值
  5. 设置查看linux 造成程序Core dumped 的函数调用层次
  6. linux 下命令行传参数问题
  7. 为什么函数在ELF中的其他共享库的长度信息?
  8. Linux内核中的container_of函数简要介绍
  9. Linux环境下注册函数的调用顺序

随机推荐

  1. Android recovery 模式 中英文对照
  2. manifest文件
  3. Android SDK相关介绍
  4. Android利用Matrix简单处理图片
  5. Android 一个supportsRtl属性 RTl是什么
  6. OkHttp
  7. Android 浏览器内核浅谈
  8. android中textview控件中的文字的位置是
  9. 从零开始学android开发- layout属性介绍
  10. 设置图片重复