typedef函數(shù)指針用法 C語言中的函數(shù)指針和指針函數(shù),有什么區(qū)別嗎?該如何理解?
C語言中的函數(shù)指針和指針函數(shù),有什么區(qū)別嗎?該如何理解?函數(shù)指針和指針函數(shù)的區(qū)別:1. 名字解析。這兩個(gè)名詞都是帶有修飾的名詞,可以略微擴(kuò)展一下,在中間加個(gè)助詞"的",函數(shù)的指針和指針的函數(shù)現(xiàn)在看看,
C語言中的函數(shù)指針和指針函數(shù),有什么區(qū)別嗎?該如何理解?
函數(shù)指針和指針函數(shù)的區(qū)別:
1. 名字解析。這兩個(gè)名詞都是帶有修飾的名詞,可以略微擴(kuò)展一下,在中間加個(gè)助詞"的",函數(shù)的指針和指針的函數(shù)現(xiàn)在看看,稍微清晰了一點(diǎn),現(xiàn)在再擴(kuò)展一下,加點(diǎn)修飾詞--指向函數(shù)的指針和返回值為指針的函數(shù)現(xiàn)在基本明確了。
2. 格式。
Type (* pFunc)(Type para) -- 函數(shù)指針
Type* Func(Type para) -- 指針函數(shù)
3. 先說指針函數(shù),其實(shí)它就是普通函數(shù),只不過返回值是指針(其實(shí)就是地址)而已,很多人因?yàn)榭謶种羔?,覺得它神秘!
4. 函數(shù)指針。這個(gè)有點(diǎn)復(fù)雜,首先*和pFunc先結(jié)合,優(yōu)先級最高,因此pFunc就是指針了,同時(shí)這個(gè)指針后面帶走一對小括號,里面還有參數(shù),和函數(shù)的參數(shù)是一樣的格式,因此這個(gè)指針就是函數(shù)指針,這個(gè)指針前面還有個(gè)類型-返回值類型!有人這里感覺很奇怪,指針怎么有返回值呢?
5. 指針有返回值,是因?yàn)檫@個(gè)指針講來使用的時(shí)候,會指向一個(gè)格式和它自己類似的函數(shù),因此這個(gè)指針的返回值和參數(shù)格式就決定了指向的函數(shù)的格式!
6. 函數(shù)指針要熟練,沒有為啥,必須會,因?yàn)楹瘮?shù)指針使用的時(shí)候體現(xiàn)的是C語言中的聯(lián)編特點(diǎn),也是后來C 語言中多態(tài)的雛形!
C語言32個(gè)關(guān)鍵字里,哪些可以用來聲明定義變量?該注意些什么?
首先從C語言的特點(diǎn)來說,它是一種靜態(tài)語言,所有變量都必須有一個(gè)類型,不管是基本類型,如int,char,float,double等,還是結(jié)構(gòu)體、聯(lián)合體、枚舉等自定義類型,只要是類型關(guān)鍵字,都可以用來定義變量。此外,還有一個(gè)變量類型叫指針,又分為變量指針和函數(shù)指針,其中變量指針指向特定數(shù)據(jù)類型的地址,函數(shù)指針指向函數(shù)的入口地址,只要將變量類型與*號結(jié)合就可以聲明指針。此處應(yīng)該注意一點(diǎn),指針是一個(gè)遞歸定義,也就是說指針可以指向一個(gè)指針,有點(diǎn)拗口,核心意思就是指針可以一直指下去。
函數(shù)指針類型的變量定義有點(diǎn)特殊,這里舉一個(gè)例子:
定義:typedef void (*myFun)(int)
?????? ? void FunImp(int param){/*函數(shù)內(nèi)容*/}
使用:myFun = FunImpmyFun(10)?
綜上,記住一個(gè)關(guān)鍵點(diǎn)定義變量一定要有類型,這個(gè)不同于Python等動態(tài)語言,為了更清楚程序運(yùn)行時(shí)的狀態(tài),最好能知道每種類型的變量在內(nèi)存中占據(jù)的空間大小,這一點(diǎn)很關(guān)鍵,很多bug就是因?yàn)樽兞吭诓煌南到y(tǒng)中占據(jù)的內(nèi)存大小不一樣導(dǎo)致的。比如對于Int類型,在32位系統(tǒng)占用4字節(jié),而在64位系統(tǒng)就占據(jù)8字節(jié)。此外,還要清楚數(shù)據(jù)在內(nèi)存中的大小端模式,即高位字節(jié)在前還是地位字節(jié)在前。