一、背景

首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义。

typedef void (PUBLIC *tCdrvCallbackFkt) (tCDrv_Handle CdrvHandle_p,

tCDrv_Event Event_p,

LPARAM pArg_p,

DWORD dwParam_p);

最近在跟别人的代码,要更改别人的代码,所以必须是理解每一行代码的意义和如何使用,遇到关于函数指针的使用,还有回调函数的使用。通过查资料来理解下定义的这个函数指针。

二、函数指针的使用

先不去看上面定义的这个函数指针,从最基本的模型理解起:

int (*p)();

上面定义p为一个指向函数的指针变量,函数返回值为整形。定义时要注意最后的空括号表示指针变量所指的是一个函数。

下面例子说明下,通过代码的注释进行理解。

#include"stdio.h"

typedef void(*p)(char* s); //定义了一个函数指针类型

void str(char* s);

int main()

{

p test; //定义一个函数指针test

test=str; //将str函数的入口地址赋给test,即指针取地址

test("Hello World\n"); //函数指针test调用str函数,即函数指针取str函数里边的内容

return 0;

}

void str(char* s)

{

printf("%s",s);

}

再来看typedef void (PUBLIC *tCdrvCallbackFkt) ()其实就是自命名定义了一个函数指针的类型,这样方便对其它函数指针的定义。

三、回调函数的使用

有了函数指针的基础后,看下如何使用回调函数,回调函数,就是使用者自己定义一个函数,使用者只管实现自己程序的内容而不用去管怎样被调用,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。下面例子说明,看代码注释理解:

#include"stdio.h"

typedef void(*p)(char* s); //定义了一个函数指针类型

void str(char* s); //函数声明

void Mycallback(p test,char* s) //实现回调函数调用的函数,对于p test也可以写成 void(*test)(),此函数只管去实现调用,程序里边具体怎样实现不用管

{

test(s);

}

int main()

{

Mycallback(str,"Hello"); //回调函数在主程序中实现调用,对于调用回调函数人来说只需要去理解调用的函数传入那些参数就好,不管函数里边内容的具体实现

return 0;

}

void str(char* s) //自己定义的回调函数,对于回调函数来说只管去实现程序内容

{

printf("%s",s);

}

四、参考文档

by 羊羊得亿

2017-05-19 ShenZhen

C语言笔记 08_函数指针&回调函数&字符串&结构体&位域

函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: / ...

typedef void(*Fun) (void)是什么意思 函数指针(回调函数) 和函数对象总结

https://blog.csdn.net/FreeApe/article/details/49124043 bool (*pf)(const string &,const string &a ...

delphi 中的函数指针 回调函数(传递函数指针,以及它需要的函数参数)

以下代码仅仅是测试代码:delphi XE7 UP1 interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.V ...

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

C/C++回调方式系列之一 函数指针和函数回调模式

一.函数指针 1. 函数的定义 return_type function_name(parameter list) { function_body } return_type: 返回值,函数一定有返回 ...

c语言的函数指针和函数指针数组的简单demo

今天,简单记录一下,函数指针和函数指针数组的使用,废话不多说,直接贴上代码,里面有详细的注释,方便以后查阅. #include #include

Delphi 函数指针(函数可以当参数)

首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...

Day8 函数指针做函数参数

课堂笔记 课程回顾         多态 virtual关键字 纯虚函数 virtual func() = 0;         提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. ...

C++中类成员函数作为回调函数

注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...

C++中 线程函数为静态函数 及 类成员函数作为回调函数

线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只 ...

随机推荐

【poj1019】 Number Sequence

http://poj.org/problem?id=1019 (题目链接) 题意 给出一个数:1 12 123 1234 12345 123456 1234567 12345678 123456789 ...

Swift 中范围和区间如何使用?

虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Range ...

SQLHelper---赵晓虎(简洁,全面)

public static class SQLHelper { //获取连接字符串,,首先添加对configuration的引用 private static string connStr = Con ...

Codeforces 551C GukiZ hates Boxes 二分答案

题目链接 题意:  一共同拥有n个空地(是一个数轴,从x=1 到 x=n),每一个空地上有a[i]块石头  有m个学生  目标是删除全部石头  一開始全部学生都站在 x=0的地方  每秒钟每一个学生都 ...

关于String.concat()方法和StringBuffer.append()方法的学习:方法是如何追加字符到源字符串的

问题分析: 首先,看看两段代码的运行结果,两段代码分别是: 第一段代码,关于String.concat()方法的测试: public static void main(String[] args) { ...

select 通过表单提交获取select中的值

整合初步______SH

什么是框架 在的J2EE开发中,经常会提到"框架"这个词汇,例如Spring,Struts,Webx等等都称之为J2EE开发框架.那么,什么是框架呢? 框架的英文为Framewor ...

json的命名空间

LVM 移除PV步骤

1.先查看需要收缩文件系统的使用情况,收缩后的文件系统空间不能小于已经使用的空间 df -hT 2.卸载需要收缩的文件系统(以/dev/vg0/lvm1为例) umount /dev/vg0/lvm1 ...

安装spring tool suite时遇到的问题

首先在Eclipse的市场里没有找到,在官网下载安装包后不能安装,于是找了解决办法,跟安装suite的版本还有关系. 我下的是http://download.springsource.com/rele ...

c语言函数指针封装函数,C语言之函数指针、回调函数的使用相关推荐

  1. c++ 传入回调函数 参数没有传入_一文读懂回调函数

    1 什么是回调函数? 来自公众号:C语言与cpp编程 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回 ...

  2. 移动端 transition动画函数的封装(仿Zepto)以及 requestAnimationFrame动画函数封装(仿jQuery)...

    移动端 css3 transition 动画 ,requestAnimationFrame 动画  对于性能的要求,h5优先考虑: 移动端 单页有时候 制作只用到简单的css3动画即可,我们封装一下, ...

  3. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  4. fit函数 model_深度学习与Tensorflow学习笔记2 ——回调函数callbacks和Tensorboard

    上一期我们从Fashion-mnist数据集开始,使用Tensorflow.keras搭建一个简单的神经网络来处理分类问题.通过这个简单例子我们熟悉了tf.keras的调用.本期我们来学习keras下 ...

  5. python ctypes 回调函数_如何用Python中的ctypes创建回调函数?

    我为海盗工具引擎SDK编写了一个包装器,但是有一个函数我还没有包装好.它是一个接受回调函数的异步函数,但我似乎不知道如何给它这个回调函数.在 函数如下所示:bool CorsairSetLedsCol ...

  6. python 回调函数的使用_如何在python中使用回调函数?

    我想知道如何正确使用 Python 2.7回调函数. 我在我的代码中有一些来自Cherrypy auth示例的回调函数. (这些回调会返回一个可以评估为True或False的函数,具体取决于登录的用户 ...

  7. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  8. typedef函数指针_C语言函数指针之回调函数

    1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...

  9. C语言中函数指针和回调函数的详解

    函数指针:指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译 ...

最新文章

  1. vr rgb yuv学习资料整理
  2. Alpha 冲刺(2/10)
  3. 【Alpha阶段汇总】成果展示与体验总结
  4. android app 适应不同大小屏幕_移动APP测试:Android屏幕适配问题二
  5. java三级报名_java web 学习 --第四天(Java三级考试)
  6. 【十万个编程篇】写文章与“写项目”的差别
  7. 追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...
  8. iOS 14.5 目前已經發布了8 個測試版更新
  9. Linux操作Oracle(9)——Oracle数据库导入导出方法详解 EXP IMP EXPDP IMPDP
  10. 笔记本电脑如何保养_锂电池保养技术 锂电池使用注意事项 锂电池技术培训
  11. mysql-日常命令使用汇总
  12. Android shell命令查询ip,网关,DNS
  13. 命令行查看ubuntu版本号
  14. java三层结构小节
  15. 嵌入式设备的机器码、cpu的id号以及网卡mac地址
  16. 全球及中国车险行业十四五渠道营销与竞争战略规划报告2022-2028年
  17. 彻底关闭FF新闻资讯
  18. bapi sap 创建物料_bapi 物料主数据创建 'BAPI_MATERIAL_SAVEDATA'
  19. 【智能优化算法】基于倭黑猩猩优化算法求解单目标优化问题附matlab代码
  20. eclipse luna java 版本_eclipse luna使用jdk1.8初始化

热门文章

  1. CodeForces - 13A Numbers【水题】
  2. 后端给图片加水印的方法
  3. 【北航软院+保研复习】计算机网络复习笔记
  4. 个人怎样注册公司,注册公司流程是什么?
  5. python 读取txt函数总结
  6. 上海计算机应用技术,电信科学技术第一研究所(上海)
  7. 网络直播平台搭建一个直播间的礼物系统
  8. 在Centos7下Hyperledger Cello安装部署和简单使用
  9. u盘被写保护?几行代码轻松搞定
  10. Tushare使用入门