【C 语言】进阶指针 Five
🚩write in front🚩
🔎Hello,大家好我是謓泽,一起共同学习,多多指教(●'◡'●)🔎
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🖊
📢2021 年度博客之星物联网与嵌入式开发 TOP5~2021 博客之星 Top100~阿里云专家 ^ 星级博主~掘金⇿InfoQ 创作者~周榜 92»总榜 1430👋
💥 函数指针数组
说函数指针数组的时候,先让我们来回顾下整形指针数组。
这是整形指针数组 — 就是这里面存放的都是整形指针。
那么函数指针数组 — 就是存放函数指针的数组。
示例,如下代码所示 👇
int(*Funtwo[2])(int, int) = { add, sub };
int(*Funtwo[2])(int, int) = { &add, &sub };
这两种写法都是一样的、取地址和不取地址、在函数都是一样的。
解释上述代码👆:Funtwo 首先和 [ ] 进行结合,和 [ ] 结合的时候就说明是个数组,数组是具有两个元素。那么当 Funtow[2] 被去掉的时候,剩下的就是函数指针了,int (*)(int,int); 加[2]是因为只是打算放入两个函数进去,那么③个④个都是一样以此类推......(13)
然后,就是对数组进行初始化。放入相应的函数进去即可!上述代码当中就放入了 add、sub 函数。
💥重点核心:函数指针数组里面就可以存放同类型的函数指针! (数据类型同、且能存放多个)
🔥 函数指针数组应用
其实主要实现在当你创建的函数过多的时候,可以用函数指针数组来进行接收进行初始化。
例如假设你有多个函数的时候,当然单个函数也行。就假设你有多个函数的时候。
示例,如下代码所示 👇
那么就可以用函数指针对应的下标来存放多少的函数的地址了,其实和指针数组特别类似。
💥 指向函数指针数组指针
指向函数指针数组的指针是一共指针指针指向一共数组,数组的元素都是函数指针。
函数指针的数组本质上是数组,取出函数指针数组的地址。
整形数组,示例,如下代码所示 👇
整形指针数组,示例,如下代码所示 👇
💥注意:在这里 pa2 是一个指向 整形指针数组 的指针!
那么接下来来说说函数指针数组 指针,示例,如下代码所示 👇
p3 就是一个指向 函数指针的数组 的 指针!
这里无非就是在 p3 加了个指针,然后用小括号括起来。之所以要用小括号,因为 p3 会和 [ ] 进行结合。那么把 (*p3)[5] 去掉的话不就是函数指针了吗?你再一看(*p3)[5]不其实也是一个数组指针🤔
当然指向函数指针数组的指针这个东西知道就可以了,最主要的是去理解,不必深究,不然你将越套越深(doge)
🌀 回调函数
回调函数就是一个通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数的时候,当这个指针被用来调用其所指向的函数时,我们就说这个是回调函数,回调函数不是由函数实现方直接调用,而是在特定的时间发生时由另外的一方进行调用的,用于对该事件或条件进行响应。
也就是 A 函数 B 函数(A 函数的地址)解释:把 A 函数的地址传递给 B 函数,那么 B 函数的形参一定是 A 函数的指针,因为指针里面才能够存 A 函数的地址。然后通过 A 函数的指针返回来调用 A 函数。那么这个 A 函数不是直接调用的,而是通过 A 函数当中的指针变量存放的这个地址。再回去调用 A 函数的时候,这个时候称之为这种机制叫做:回调函数!
简单讲:回调函数是由别人的函数执行时调用你实现的函数,也就是回调函数必须借鉴一个函数的参数为函数指针才行。
示例,如下代码所示 👇
编译运行结果👇
Hello, this is Callback_1: x = 2
Hello, this is Callback_2: x = 4
Hello, this is Callback_3: x = 6
💥注意:回调函数是通过一个函数指针再进行调用的函数。
版权声明: 本文为 InfoQ 作者【謓泽】的原创文章。
原文链接:【http://xie.infoq.cn/article/b8ba4038c179968e3d2228a25】。文章转载请联系作者。
评论