函數指針做函數參數(回調函數)
回調函數概念
一般有三種調用方式
回調函數的作用
回調函數調用時刻
回調函數的文法:
1.簡單的函數類型為:無參數、無傳回值的函數。
2.完全形式的回調函數
注:
代碼案例:模拟電腦
函數參數除了是普通變量,還可以是函數指針變量,也就是可以實作回調函數。
所謂回調,就是子產品a要通過子產品b的某個函數b()完成一定的功能,但是函數b()自己無法實作全部功能,需要反過頭來調用子產品a中的某個函數a()來完成,這個a()就是回調函數。
回調函數是程式中一種常用的函數調用方式。其特點是可以在下層軟體子產品(宏觀上的被調用者)中,調用來自上層的軟體子產品(宏觀上的調用者)中的函數,這和通常的調用順序是相反的。
程式的調用方式軟體子產品的關系,從總體上看,有上層軟體子產品和下層軟體子產品之分。
簡單的同步調用上調下直接傳回
帶有回調的調用雙向調用
異步調用一般基于消息或事件類似mfc的機制
帶有回調的調用方式是一種雙向調用模式,在這種方式中,下層子產品的函數在被調用的時候,将會調用上層子產品的某個函數,回調上層子產品的函數至少有兩個作用,一是監視下層子產品函數的運作狀态,二是幹預下層子產品函數的運作。
在c語言中回調函數的基礎是函數類型的指針。
回調函數的作用:回調函數的表現形式是一個某種類型的函數指針,這個函數由上層的軟體子產品實作,将這個函數指針通過某種方式傳遞給下層的軟體子產品,由下層的軟體子產品在某個時刻調用這個函數。
函數指針的本質是一個函位址,在32位的系統中,本質是一個32位無符号整數。
函數指針由上層子產品傳遞到下層子產品的傳遞方式是可以通過函數的參數傳遞,也可以使用結構體的成員進行傳遞。
調用回調函數的時刻一般有兩種:
一種是在上層子產品調用下層子產品的函數中,直接調用回調函數:
另一種是使用注冊的方式,在某個事件發生的時候下層子產品調用回調函數。
簡單的回調函數的格式是這種形式。其類型的定義如下所示:
注:回調函數可以是任意類型的函數指針,簡單的形式是無任何參數,也沒有傳回值得函數指針
完全形式的回調函數可以按照如下方式實作,它包含兩個無符号整數的參數,傳回值也是無符号的整數。其類型的定義如下所示:
具體例如這樣:
函數指針變量常見的用途之一:是把指針作為參數傳遞到其他函數,指向函數的指針也可以作為參數,以實作函數位址的傳遞。
1.典型的回調函數包含兩個整數型參數和整數傳回值,第一個參數由下層定義,第二個參數由上層定義,傳回值是上層經過回調回報給下層的
2.事實上,這種回調機制在一個系統的各個層次軟體協同處理的時候很常用。例如,下層子產品表示一個gui系統,具有繪制界面的功能,上層将子產品将回調函數的指針傳遞給下層,當界面産生“事件”的時候,調用回調函數執行上層軟體子產品所定制的行為。
運作結果為: