c语言回调函数

转载 2015年11月18日 19:10:02

本文转载自 http://www.cnblogs.com/2eggs/archive/2012/11/20/2779567.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
C语言回调函数
回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。
回调函数使用是必要的,在我们想通过一个统一接口实现不同的内容,这时用回掉函数非常合适。
比如,我们为几个不同的设备分别写了不同的显示函数:
void TVshow(); void ComputerShow(); void NoteBookShow()...等等。
这是我们想用一个统一的显示函数,我们这时就可以用回掉函数了。
void show(void (*ptr)());
使用时根据所传入的参数不同而调用不同的回调函数。
 
不同的编程语言可能有不同的语法,
下面举一个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);
}
//////////////////////////////////////////////////////////////////////////////
int main()
{
    printf("************************\n");
    Caller1(Test1);     //相当于调用Test1();
    printf("&&&&&&************************\n");
    Caller2(30, Test2); //相当于调用Test2(30);
    return 0;
}
//////////////////////////////////////////////////////////////////////////////
 
以上通过将回调函数的地址传给调用者从而实现调用,但是需要注意的是带参回调函数的用法。
要实现回调,必须首先定义函数指针。函数指针的定义这里稍微提一下。
比如:
int (*ptr)(); 这里ptr是一个函数指针,其中(*ptr)的括号不能省略,
因为括号的优先级高于星号,那样就成了一个返回类型为整型的函数声明了。

c语言实现回调函数

callback.c/* * @file c语言实现回调函数 * @detial 在java等更高级的语言中往往已经给我们封装好了回调函数的调用方式,直接用就可以了。而C语言中并没有这种直接可以操...
  • socho
  • socho
  • 2016年06月04日 10:13
  • 2226

C语言回调函数的定义和写法

C语言中的回调函数(Callback Function) 1 定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系...
  • qq_27568125
  • qq_27568125
  • 2017年02月14日 09:07
  • 2896

深入浅出剖析C语言函数指针与回调函数(一)

今天我们要搞明白的一个概念叫回调函数。什么是回调函数?百度的权威解释如下:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数...
  • morixinguan
  • morixinguan
  • 2017年03月24日 00:19
  • 4480

C语言回调函数熟练---使用方法(构建程序框架方便好用)

使用步骤: 1.写一个函数A,A里面有一个参数是个指针函数 比如: int shao(int a,int (*Pcall)(void *p))  2.有个指针函数参数,那他要指向一个函数,OK,写...
  • dldw8816
  • dldw8816
  • 2016年05月24日 11:26
  • 2822

C语言中的回调

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是...
  • maochengtao
  • maochengtao
  • 2015年11月19日 15:31
  • 1364

回调函数及其在C语言中的使用

转自 http://blog.csdn.net/gtopia/article/details/10162175 1、什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三...
  • u011739891
  • u011739891
  • 2014年07月31日 14:41
  • 1047

c回调函数(真不好理解)

什么是回调函数(callback)      模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了...
  • ghevinn
  • ghevinn
  • 2015年06月16日 18:50
  • 1858

回调指针回调函数的使用(C语言)

回调函数,顾名思义,就是使用者自己定义一个函数,使用者自己实现这个函数的程序内容,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人...
  • miao19920101
  • miao19920101
  • 2017年07月21日 15:59
  • 343

c语言函数回调函数回调

实现以上功能 首先还是老规矩创建.h文件和.m文件 .h文件声明一下几个函数方法 //创建一个Teacher结构体 typedef st...
  • u011746274
  • u011746274
  • 2015年06月26日 21:08
  • 376

回调函数以及钩子函数的概念

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可...
  • sszgg2006
  • sszgg2006
  • 2013年12月02日 09:28
  • 5708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言回调函数
举报原因:
原因补充:

(最多只允许输入30个字)