進一步探討指向指針的指針
指針的指針使用過多會使程序變得龐大,變得難以維護苹支。但指針的指針在如鏈表的插入操作中砾隅,又是必須的;
綜上所述在不需要使用指針的指針的地方就盡量不要使用债蜜。
高級聲明
int f; ? ? ? ? ? int ?*f; ? ? ? int *f,g;
int f(); ? ? ? ? int *f();/*()的優(yōu)先級大于* ,所以這里指函數(shù)f的返回值為int * ?*/ ? ? ? ? ?int (*f)(); /*f是一個函數(shù)指針晴埂,其返回值為int */
int ?f[]; ? int *f[] ?/*下標的優(yōu)先級更高,所以f是一個數(shù)組策幼,數(shù)組元素為int ?* */
int (*f[])();f首先是一個數(shù)組邑时,數(shù)組元素是一個指針奴紧,這個指針是函數(shù)指針類型
函數(shù)指針
回調(diào)函數(shù)
最常用的應用場景特姐,當你需要在一個鏈表里查找某個值時,如果是數(shù)字字符是否相等用==就好了黍氮,如果是字符串的話就需要使用另外的比較方式唐含。所以為了完成查找這個值得在函數(shù)中考慮不同的值類型。一種較好的方法是沫浆,我們在鏈表中查找某個值的函數(shù)定義的參數(shù)中聲明一個函數(shù)指針(不同的值就傳不同的比較函數(shù))捷枯。然后值的參數(shù)類型用void *,因為值有很多中专执,這樣不同的值類型都可以用這同一個鏈表差值的函數(shù)淮捆,只是給它傳遞不同比較函數(shù)即可。
轉(zhuǎn)移表
類似這樣的場景可以用轉(zhuǎn)移表本股。當考慮多種情況攀痊,分情況選擇不同的處理。最常采用的方法是使用switch結(jié)構拄显,但如果情況多了的話苟径,switch會顯得異常臃腫。我們可以采用轉(zhuǎn)移表的方法來解決這個問題躬审,不同的處理我們用不同的函數(shù)棘街,然后聲明一個函數(shù)指針,不同的情況對應不同的下標承边,然后分別調(diào)用相應的處理函數(shù)即可遭殉。
命令行參數(shù)
字符串常量
下面兩個小例子用到了這個知識