回调函数的应用误区1(原汁原味的函数指针应用)

研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法。我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽。

下面的代码可以在Vs2008下编译并运行:

个人观点:

虽说代码里面到处都注解说这里是回调函数声明,那里是回调函数实现;这里是被调函数声明,那里是被调函数实现;但.....其实个人更感觉这代码更像是一篇函数指针的应用。

跟回调函数没有太大关系,说有关系那也只是格式上的关系。

个人总结:

这篇文章可以让你学会函数指针的使用方法。把它当作回调函数学习入门的基础。

#include <stdio.h>

//回调函数声明
typedef void (*CallBackFun)(void); // 为回调函数命名,类型命名为
CallBackFun,参数为char *p

// 回调函数实现:Afun:格式符合 CallBackFun 的格式,因此可以看作是一个
CallBackFun   
void Afun()
{
  
 printf("Afun\n");
}

//回调函数实现:Bfun:格式符合 CallBackFun 的格式,因此可以看作是一个
CallBackFun
void Bfun()
{
  
 printf("Bfun\n");
}

//被调函数:执行回调方式一:命名方式
void
call1(CallBackFun pCallBack)
{
    printf("call1:
");
    pCallBack();
}

//被调函数:执行回调方式二:函数指针方式
void
call2(void(*ptr)())
{
    printf("call2:
");
    (*ptr)();
}

int
main()
{
    call1(Afun);
  
 call1(Bfun);

    call2(Afun);
  
 call2(Bfun);

    return 0;
}

时间: 2024-11-08 23:43:30

回调函数的应用误区1(原汁原味的函数指针应用)的相关文章

回调函数的应用误区3(大彻大悟的回调小程序,例子的解释相当给力)

研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法.我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽. 下面的代码可以在Vs2008下编译并运行: 所有的回调函数文章里,能让我一下看明白回调函数的就是这篇文章了,描述简单,一语中的:http://hi.baidu.com/zht7216/item/1dd32e82a68c40d15f0ec154 摘选如下: 函数指针是一个指向函数的指针变量,它是专门来存放函数入口地址的,在

回调函数的本质,就是把函数当作参数(首先要定义函数类型)

//把一个方法当作另一个方法的参数, 就是回调方法, 大家习惯称作回调函数 type   TFunType = function(i: Integer): Integer; {声明一个方法类型} function MyFun(i: Integer): Integer;        {建立类型兼容的函数} begin   Result := i*2; end; {把函数当作参数, 再定义一个函数} function MyTest(x: Integer; F: TFunType): Integer

【误区】 通过调用函数 ,意图响应数据

1.[误区] 通过调用函数 ,意图响应数据: 实际返回的是‘aaa' .如果不exit(’aaa'); 则什么也不返回. 2. 由问题1.引起的拓展. 在做一些大项目,利于拓展性,可以在子函数内抛异常,主函数try catch 捕获异常.子函数处理各种逻辑 ,主函数只需要调用一次此函数就可以. 建议需要验证的数据都需要try catch 原文地址:https://www.cnblogs.com/wangyuyanhello/p/11333949.html

epoll函数及三种I/O复用函数的对比

epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout) Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数

python函数(6):内置函数和匿名函数

我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部定义好我们可以直接调用的函数就叫内部函数.python一共给我们68个内置函数: abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() as

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

Entity Framework 6 Recipes 2nd Edition(11-4)译 -&gt; 在”模型定义”函数里调用另一个”模型定义”函数

11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11-4所示: Figure 11-4. A model representing the associate types in a company together with the reporting association 在我们的虚拟的公司里, , team members被一个team lea

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

还是用一个例子来说明吧 1 #define unsigned int UINT32 2 3 class RMB 4 { 5 public: 6 RMB(UINT32 d, UINT32 c); 7 friend RMB operator +(RMB&, RMB&); 8 friend RMB& operator ++(RMB&); 9 void display() 10 { 11 cout<<(yuan + jf / 100.0)<<endl; 12