標(biāo)題: C語(yǔ)言函數(shù)指針的探索 [打印本頁(yè)]

作者: xueer    時(shí)間: 2013-7-31 01:31
標(biāo)題: C語(yǔ)言函數(shù)指針的探索
一談到C語(yǔ)言,很多學(xué)過(guò)編程的同學(xué)會(huì)感覺(jué)比較容易。但是談到C語(yǔ)言的指針,大多數(shù)的同學(xué)就不這么認(rèn)為了,但是當(dāng)談到函數(shù)指針時(shí),很多在校的同學(xué)更是望而卻步。今天就來(lái)探索一下函數(shù)指針的使用:
用過(guò)Visual studio的同學(xué)一定會(huì)對(duì)微軟的自動(dòng)提示功能大為驚嘆,編寫C語(yǔ)言有沒(méi)有好的工具呢,答案是肯定的。向大家推薦一款Source Insight軟件,使用方法大家自己摸索。
1.函數(shù)指針的聲明,初始化與調(diào)用

從這里大家可以看出,函數(shù)指針其實(shí)并沒(méi)有什么神奇的地方,與int *型的整型指針并無(wú)差異。需要說(shuō)明的是:對(duì)于函數(shù)的函數(shù)名其實(shí)就是一個(gè)地址,所以h = &welcome也可以寫為
h = welcome,一般都是這樣應(yīng)用,在上面只是為了做對(duì)比。
2.函數(shù)指針作為形參回調(diào)函數(shù)的實(shí)現(xiàn)
我們知道int *指針可以作為函數(shù)的參數(shù)進(jìn)行傳遞并參與運(yùn)算,但函數(shù)指針可不可以作為函數(shù)的參數(shù)進(jìn)行傳遞呢?下面以一個(gè)比較實(shí)用的單片機(jī)常見(jiàn)的例子按鍵處理函數(shù)為大家講解一下函數(shù)指針作為形參的應(yīng)用。在這里為了讓大家看到效果,將button定義為0



//按鍵處理函數(shù)

//主函數(shù)


3.實(shí)用typedef定義函數(shù)指針
上面我們使用了void (*handler)(void) 作為參數(shù)進(jìn)行傳遞,我們可以實(shí)用typedef定義這個(gè)函數(shù)指針,使程序更加簡(jiǎn)潔。
改動(dòng)的地方如圖所示,效果上同,請(qǐng)自己測(cè)試。
修改的地方
4.綜合例子
使用struct結(jié)構(gòu)體和函數(shù)指針結(jié)合實(shí)現(xiàn)模塊化編程的封裝
希望對(duì)大家有所啟發(fā)。
例子如下:
led.c的內(nèi)容如下:
led.h的內(nèi)容如下:
Main.c的內(nèi)容如下:
                                                 Main.c part1
                                                        Main.c part2
運(yùn)行結(jié)果:
   





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1