C语言追C语言中的回调函数

http://www.blogjava.net/huyi2006/articles/180169.html

扭曲调函数是一个程序员不可知显式调用的函数;通过将回调函数的地点传为
调用者从而实现调用。回调函数使用是必要的,在我们怀念通过一个集合接口实现非

跟的始末,这时用掉少函数非常确切。比如,我们也几只例外之设备分别写了不同
的显得函数:void TVshow(); void
ComputerShow(); void NoteBookShow()…等
等于。这是我们纪念就此一个联合的示函数,我们这就足以就此掉少函数了。void
sho
w(void (*ptr)()); 使用时因所传颂的参数不同而调用不同的回调函数。

     
不同的编程语言或发异之语法,下面举一个c语言中回调函数的事例,
个中一个回调函数不带来参数,另一个回调函数带参数。

      例子1:
//Test.c
#include <stdlib.h>
#include
<stdio.h>
int Test1()
{
  int i;
  for (i=0; i<30; i++)

  {
printf(“The %d th charactor is: %c\n”, i, (char)(‘a’ + i%26));

  }
  return 0;
}
int Test2(int num)
{
  int i;

  for (i=0; i<num; i++)
  {
   printf(“The %d th charactor is:
%c\n”, i, (char)(‘a’ + i%26));

  }
  return 0;
}
void
Caller1(void (*ptr)())//指向函数的指针作函数参数
{
  (*ptr)();
}
void
Caller2(int n, int
(*ptr)())//指向函数的指针作函数参数,这里首先只参数是吧因为函数的指针服务之,
{
                                              //不可知写成void Caller2(int
(*ptr)(int
n)),这样的概念语法错误。
  (*ptr)(n);
  return;
}
int main()
{

  printf(“************************\n”);
  Caller1(Test1);
//相当给调用Test2();

  printf(“&&&&&&************************\n”);

  Caller2(30, Test2); //相当于调用Test2(30);
  return 0;
}

     
以上通过以回调函数的地点传被调用者从而实现调用,但是用留意的凡带来

参回调函数的用法。要促成回调,必须首先定义函数指针。函数指针的定义这里小
微提一下。比如:
    int (*ptr)();
这里ptr是一个函数指针,其中(*ptr)的括号不可知简单,因为
括号的先行级高于星号,那样就变成了一个赶回路也整型的函数声明了