一談到C語言,很多學過編程的同學會感覺比較容易。但是談到C語言的指針,大多數的同學就不這么認為了,但是當談到函數指針時,很多在校的同學更是望而卻步。今天就來探索一下函數指針的使用: 用過Visual studio的同學一定會對微軟的自動提示功能大為驚嘆,編寫C語言有沒有好的工具呢,答案是肯定的。向大家推薦一款Source Insight軟件,使用方法大家自己摸索。 1.函數指針的聲明,初始化與調用
50.png (7.37 KB, 下載次數: 106)
下載附件
2013-7-31 01:29 上傳
51.png (1.08 KB, 下載次數: 112)
下載附件
2013-7-31 01:29 上傳
從這里大家可以看出,函數指針其實并沒有什么神奇的地方,與int *型的整型指針并無差異。需要說明的是:對于函數的函數名其實就是一個地址,所以h = &welcome也可以寫為 h = welcome,一般都是這樣應用,在上面只是為了做對比。 2.函數指針作為形參—回調函數的實現我們知道int *指針可以作為函數的參數進行傳遞并參與運算,但函數指針可不可以作為函數的參數進行傳遞呢?下面以一個比較實用的單片機常見的例子按鍵處理函數為大家講解一下函數指針作為形參的應用。在這里為了讓大家看到效果,將button定義為0
52.png (2.37 KB, 下載次數: 130)
下載附件
2013-7-31 01:29 上傳
53.png (5.24 KB, 下載次數: 116)
下載附件
2013-7-31 01:29 上傳
//按鍵處理函數
54.png (1.84 KB, 下載次數: 108)
下載附件
2013-7-31 01:29 上傳
//主函數
55.png (1.61 KB, 下載次數: 124)
下載附件
2013-7-31 01:29 上傳
56.png (1 KB, 下載次數: 115)
下載附件
2013-7-31 01:29 上傳
3.實用typedef定義函數指針上面我們使用了void (*handler)(void)
57.png (7.46 KB, 下載次數: 126)
下載附件
2013-7-31 01:29 上傳
作為參數進行傳遞,我們可以實用typedef定義這個函數指針,使程序更加簡潔。 改動的地方如圖所示,效果上同,請自己測試。 修改的地方
58.png (3.73 KB, 下載次數: 134)
下載附件
2013-7-31 01:29 上傳
4.綜合例子使用struct結構體和函數指針結合實現模塊化編程的封裝 希望對大家有所啟發。 例子如下: led.c的內容如下:
59.png (8.13 KB, 下載次數: 125)
下載附件
2013-7-31 01:29 上傳
led.h的內容如下:
60.png (9.85 KB, 下載次數: 129)
下載附件
2013-7-31 01:29 上傳
Main.c的內容如下:
61.png (9.59 KB, 下載次數: 119)
下載附件
2013-7-31 01:29 上傳
Main.c part1
62.png (10.46 KB, 下載次數: 127)
下載附件
2013-7-31 01:29 上傳
Main.c part2 運行結果:
62.png (1.57 KB, 下載次數: 101)
下載附件
2013-7-31 01:30 上傳
|