【C语言进阶深度学习记录】三十二 函数指针与使用函数指针实现回调函数
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】三十二 函数指针与使用函数指针实现回调函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
回調(diào)函數(shù)是非常重要的概念
文章目錄
- 1 函數(shù)的類型
- 2 函數(shù)指針
- 2.1 函數(shù)指針的使用
- 2.2 使用函數(shù)指針實現(xiàn)回調(diào)函數(shù)
- 3 總結(jié)
1 函數(shù)的類型
跟以前學(xué)數(shù)組的時候是一樣的,C語言中的數(shù)組是有自己的類型的。函數(shù)也是有自己的類型的。
- 函數(shù)的類型由返回值、參數(shù)的類型、參數(shù)的個數(shù)共同決定
比如函數(shù)int add(int i, int j); 的函數(shù)類型是int (int, int)
- 在C語言中可以使用typedef為函數(shù)重命名,如下
上面定義函數(shù)類型一會再后面寫具體的代碼就會明白。
2 函數(shù)指針
與數(shù)組指針很相似
- 函數(shù)指針用于指向一個函數(shù)
- 函數(shù)名執(zhí)行函數(shù)體的入口地址(這里與數(shù)組指針一樣,數(shù)組名代表數(shù)組的入口地址)
- 可以通過函數(shù)的類型定義函數(shù)指針:FuncType* pointer(例如上面定義的f,那么f* p; p指向函數(shù)類型為f的函數(shù)。)
- 也可以直接定義(這種我們見到的比較多):type (*pointer)(parameter list)
上面:
2.1 函數(shù)指針的使用
下面代碼是演示定義函數(shù)類型與如何使用函數(shù)指針的代碼:
- 36-1.c:
- 運行結(jié)果為:
上面代碼比較簡單,我們注意兩點:
- typedef int FUNC(int); //定義函數(shù)類型
- FUNC* pt = t; //定義函數(shù)指針pt
- void(*pf)() = &f; //定義函數(shù)指針pf
- 函數(shù)名f代表函數(shù)的入口地址,&f代表函數(shù)的整個地址(類似于數(shù)組),所以在數(shù)值上f與&f是相等的。但是意義不一樣。
- 函數(shù)指針的使用:pf(); 或者 (*pf)(); 一般像前者那么使用
2.2 使用函數(shù)指針實現(xiàn)回調(diào)函數(shù)
如何使用C語言直接跳轉(zhuǎn)到某個固定的地址開始執(zhí)行?(不是goto)
使用回調(diào)函數(shù),回調(diào)函數(shù)是一種很重要的思想。那么什么是回調(diào)機制呢?
- 回調(diào)機制原理:
回調(diào)機制中的調(diào)用者和被調(diào)用者沒有依賴關(guān)系
-
上面的理論,看起來并不是很容易讓人理解,下面直接上手寫代碼就知道什么是回調(diào)函數(shù)了。
-
代碼 36-2.c
- 上述代碼的意思是:吃水果獲得能量。但是吃什么水果,只有在程序運行起來之后才知道。
- 所以吃這個動作Eat函數(shù)的參數(shù)無法指定吃哪種水果
- 只能使用函數(shù)指針作為Eat函數(shù)的參數(shù),當(dāng)程序運行起來時根據(jù)傳進來的參數(shù)確定吃什么水果,以及獲得多少能量
上述程序編譯運行結(jié)果為:
分析:
- 上面代碼主要的核心就在于函數(shù)指針的使用。一定要學(xué)會函數(shù)指針的定義使用。
- 學(xué)會使用函數(shù)指針來實現(xiàn)回調(diào)函數(shù)
3 總結(jié)
- 學(xué)會定義函數(shù)類型
- 學(xué)會使用函數(shù)類型定義函數(shù)指針
- 學(xué)會使用函數(shù)指針實現(xiàn)回調(diào)機制
總結(jié)
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】三十二 函数指针与使用函数指针实现回调函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java常用设计模式总结
- 下一篇: 【C语言进阶深度学习记录】十八 条件编译