函数指针,以及用函数指针的好用之处(回调函数)
1、函数指针
定义“函数地址”:
如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。
函数名就是地址,跟以前说的数组名代表地址一样。
( int (*p)[4] 这是一个数组指针,原因是中括号的优先级 高于*的)
之前我们都这样写
可以改动一下
函数指针也讲究类型
下面就是把函数原型copy 过来 ,把函数名字改成p2,其他东西保留,这样才能让p2 指向这个函数
函数指针的好用之处
2、使用函数指针实现 练习题
第21行调用哪个函数,是根据用户输入的cmd值
*pfunc 就是在调函数啦
上面函数的第18 行可以配合着线程理解
int getMax(int data1,int data2)
int getMin(int data1,int data2)
int getSum(int data1,int data2)
他们的函数原型长得一样 ,所以可以共用一个指针
根据用户的输入确定pfunc 是什么值
再调用dataHandler 把两个操作数以及操作的算法传过来
cmd 是操作指令,用户输入完操作指令。输入完操作指令以后,去调用dataHandler,dataHandler之前,我们根据用户的输入指令,已经指定了这个函数指针到底是要执行什么样的运算法则,当dataHandler调用的时候运算法则有了 ,操作数也有了。
结果如下
(补充)
上面第三个是个函数指针
形参列表强调的是函数的类型,可以把参数名去掉
包括函数指针在定义的时候
之所以在这里面要写data1,data2,是因为我们要用到这个名字,
如果用不到这个名字,后面的变量就无所谓
我们强调的是形参当中是什么类型的数据,类型很重要,变量名不重要,名字是地址的一个访问方式
需要内存空间就得有名 ,后面没有用data1 和data2 ,因为后面是假的 操作真正的数据的是前面的data1 和 data2
函数指针,以及用函数指针的好用之处(回调函数)相关推荐
- python回调函数实例详解_python 简单的例子下详解回调函数
回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...
- 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
文章目录 I . AAudio 音频流 采样 缓冲 播放 的连续机制 II . AAudio 音频流 数据回调函数 函数指针类型定义 III . AAudio 音频流 数据回调函数 实现 IV . A ...
- C++函数指针与回调函数
[转自]cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数. 在理解"回调函数& ...
- Linux C 函数指针应用---回调函数
(这里引用了知乎上一些知友的回答,感觉不错,有助于理解,这里引用作为借鉴,如有冒犯,烦请告知) 我们先来回顾一下函数指针,函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表 ...
- C/C++函数指针与回调函数总结(函数指针数组)
函数有它的地址,程序运行起来了,程序里肯定有地方要放这个函数.我们知道可以用printf %p来输出一个变量的地址,数组的地址,同样我们定义了一个函数后,用这个函数的名字做输出,就可以得到这个函数的 ...
- C++之指针探究(十四):回调函数
相关博文:C++之指针探究(十三):函数指针数组 相关博文:C++之指针探究(十二):指针.下标.数组及其作函数参数探究 相关博文:C++之指针探究(十一):函数名的本质和函数指针 相关博文:C++之 ...
- 网络编程之 信号捕捉器(函数指针与回调函数)
接着我们的信号说下去 之前博主给大家分享到了信号的概念和初步介绍signal函数的形式后就没有继续往下介绍了,实在是因为时间不够,那个时候博主还要上课,现在博主放假了就好好给大家分享一下如何 ...
- Linux C 函数指针应用---回调函数
(这里引用了知乎上一些知友的回答,感觉不错,有助于理解,这里引用作为借鉴,如有冒犯,烦请告知) 我们先来回顾一下函数指针,函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表 ...
- 函数指针实现回调函数
首先说明是函数指针,函数指针,就是一个函数,将其函数名指针化,通过传入指针调用不同的函数 手撸代码一次 #include<stdio.h> void max(int a,int b) { ...
最新文章
- Ubuntu15.04安装IPSec/L2TP
- JQuery 中有用的方法
- AOM联盟:AV1完成1.0版定稿
- .NET 6 新特性 PeriodicTimer
- [转载]理解OAuth 2.0
- 从当前文件夹以及子文件夹中,批量移动指定名字的文件
- Java中反射性能测试
- pom.xml mvn package expected START_TAG or END_TAG not TEXT
- AOJ-754 数根
- mysql触发器新增或修改_mysql触发器实例 插入数据前更改数据值
- [远程桌面]程mstsc连接Windows Server2008 未安装任何音频输出设备 启用声音音频解决
- 弹性均质圆环法计算过程_盾构隧道衬砌结构内力计算方法的对比浅析
- Latex语法学习05:代码表格的制作
- JAVA随机生成中文姓名,性别,Email,手机号,住址
- 通过MapReduce统计PV和UV
- 基于嵌入式Linux的MP3播放器的设计与实现
- 大数据高频面试题总结
- Vue视频流播放器 Vue-Core-Video-Player
- 电脑端使用文件微信聊天记录的本机/新机备份迁移
- matlab基础及应用 李国朝,Matlab基础与应用(李晓鹏)