函数指针
函数指针的定义
- 本质是一个指针
- 指向函数的指针
引言
OK啊,结合计算机组成、单片机系统基础、操作系统。
不难知道,无论是目前PC的冯诺依曼架构,还是单片机的哈佛架构,程序都是需要空间保存的,只不过两个架构保存的地方不一样而已。
那么,函数当然有自己的指针啦,不然你汇编JMP怎么知道跳到哪一行。
C语言也差不多,C语言中函数的名字就是函数的首地址(入口地址),那么我定义一个指针指向这里当然是一个允许的操作啦~
而这种内容存的是函数入口地址的指针变量,我们就叫它函数指针用来和其他的数据指针区别一下。
顺便说一下,这种“存入口地址”或者“存起始地址”的指针,往往定义的时候喜欢用 类型 + (*指针名)定义,数组指针也这样,函数指针也这样;不加括号就是反过来指针数组,指针函数。(开始晕了)
用例
1 |
|
这样就相当于给两个函数都抽象出来了,那么是不是可以做点什么呢……
函数指针的调用
1 | //接上文代码 |
函数指针的调用可以省略括号
函数指针数组
函数指针常用常用于将函数作为参数传递给另一个函数,这个函数就被称为回调函数
函数指针数组的妙用
当然是用函数指针把功能类似编个组放一起啦!(相当于建立函数库)这样在使用回调函数的时候甚至可以用偏移量来决定调用的函数,就不需要Switch来路由函数了。
1 |
|
顺便复习一下指针为什么要有类型?
- 防止对内存的越界操作
(我改一个2B的变量,结果指针的类型是4B的类型,你猜猜多出来的2B的数据写哪去了?//操作系统:阿米诺斯,编译器你怎么给这操作允许了,给我栈区都干穿了,线程都干开线了。)