作者主頁(yè):paper jie的博客_CSDN博客-C語(yǔ)言,算法詳解領(lǐng)域博主
本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。
本文錄入于《系統(tǒng)解析C語(yǔ)言》專(zhuān)欄,本專(zhuān)欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將C語(yǔ)言基礎(chǔ)知識(shí)一網(wǎng)打盡,希望可以幫到讀者們哦。
其他專(zhuān)欄:《C語(yǔ)言》《算法詳解》《C語(yǔ)言-語(yǔ)法篇》
內(nèi)容分享:本期對(duì)C語(yǔ)言中的指針的進(jìn)階知識(shí)進(jìn)行進(jìn)行具體講解,各位看官姥爺快搬好小板凳坐好叭。
? ? -------- 不要998,不要98,只要一鍵三連,三連買(mǎi)不了吃虧,買(mǎi)不了上
當(dāng)
目錄
??寫(xiě)在前面
??函數(shù)指針
??兩段有趣的代碼
??函數(shù)指針數(shù)組
??指向函數(shù)指針數(shù)組的指針
??回調(diào)函數(shù)
??寫(xiě)在前面
接上一篇的文章,接下來(lái)我們將對(duì)函數(shù)指針,函數(shù)指針的數(shù)組,指向函數(shù)指針數(shù)組的指針,回調(diào)函數(shù)進(jìn)行具體的分析,在學(xué)習(xí)這些內(nèi)容之前,我認(rèn)為這些知識(shí)是可有可無(wú)的,應(yīng)用場(chǎng)景非常少。但是在學(xué)完之后發(fā)現(xiàn)并不是這樣,所以各位還是請(qǐng)耐心看看叭。
??函數(shù)指針
我們?cè)谇懊娴膬?nèi)容中,學(xué)習(xí)到了整型指針,字符指針,數(shù)組指針,那函數(shù)指針又是怎么定義的呢?
?在這里,我們就要思考了:&test 和test是一樣的地址嗎,它們的arr,&arr有區(qū)別嗎?
test和&test的地址一樣
?test和&test的意義是一樣的
通過(guò)結(jié)果我們可以發(fā)現(xiàn)int(*padd)(int,int) = add 也可以得到結(jié)果,所以它們的意義一樣,于arr,&arr有區(qū)別。且我們通過(guò)代碼可知道:函數(shù)調(diào)用用add,(*padd),padd都可以得到結(jié)果。
但是,有一個(gè)地方得注意: *(padd)(2, 3),這樣子是不可以的,它存放不了指針。它是先和(2,3)結(jié)合,再和*結(jié)合。
??兩段有趣的代碼
//代碼1
(*(void (*)())0)();
//代碼2
void (*signal(int, void(*)(int)))(int);
?解析:
//代碼1
(*(void (*)())0)();
//調(diào)用0地址處的函數(shù)
// 返回類(lèi)型是void 無(wú)參數(shù)
//1. void(*)() 是一個(gè)函數(shù)指針類(lèi)型
// 返回類(lèi)型是void 沒(méi)有參數(shù)
//2. (void(*)())0 將0強(qiáng)制類(lèi)型轉(zhuǎn)化為函數(shù)地址
//3. *(void(*)())0 將0地址進(jìn)行了解引用操作 找到0地址處的函數(shù)
//4. (*(void (*)())0)() 函數(shù)調(diào)用 調(diào)用0的地址的函數(shù)
//代碼2
void (*signal(int, void(*)(int)))(int);
//這是一個(gè)函數(shù)聲明 該函數(shù)的返回類(lèi)型是函數(shù)指針 參數(shù)是int和函數(shù)指針
//1. void(*)(int) 函數(shù)指針類(lèi)型 返回類(lèi)型是void 參數(shù)是int類(lèi)型
//2. sianal(int, void(*)(int)) sianal是一個(gè)函數(shù)名 參數(shù)是int 和一個(gè) 函數(shù)指針
//3. void (*signal(int, void(*)(int)))(int); sianal 的返回類(lèi)型也是一個(gè)函數(shù)指針
//該指針?lè)祷仡?lèi)型是void 參數(shù)是int
這些“奇葩的代碼”是在《C陷阱和缺陷》中看到的,大家有興趣也可以去看看,里面有許多有趣的代碼。
??函數(shù)指針數(shù)組
數(shù)組是一個(gè)存放同類(lèi)型數(shù)據(jù)的存儲(chǔ)空間,在之前的文章類(lèi)里,我們已經(jīng)學(xué)習(xí)了指針數(shù)組。
把一個(gè)函數(shù)的地址放到一個(gè)數(shù)組中,那這個(gè)數(shù)組就是叫函數(shù)指針數(shù)組。它的定義方式如下:?
??指向函數(shù)指針數(shù)組的指針
函數(shù)指針數(shù)組指針,顧名思義,它是一個(gè)指針,這個(gè)指針指向一個(gè)數(shù)組,且指向的這個(gè)數(shù)組里面元素的類(lèi)型是函數(shù)指針類(lèi)型。
定義:
??回調(diào)函數(shù)
通俗的講就是:一個(gè)函數(shù)的地址給另一個(gè)函數(shù)做參數(shù),在執(zhí)行的過(guò)程中用到了這個(gè)參數(shù)就回到那個(gè)函數(shù)運(yùn)行,得到的結(jié)果再返回來(lái)。
畫(huà)圖解釋就是:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-487726.html
到這里,我們對(duì)C語(yǔ)言指針的內(nèi)容已經(jīng)全部學(xué)完啦。通過(guò)初階和進(jìn)階的知識(shí),這些足以支撐我們以后的學(xué)習(xí)。接下來(lái)在想提高對(duì)指針的理解大家只有去通過(guò)刷題和一些項(xiàng)目來(lái)拔高對(duì)它的理解啦。后面還會(huì)有一篇對(duì)指針練習(xí)題的講解,大家敬請(qǐng)期待叭。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-487726.html
到了這里,關(guān)于深度刨析指針Advanced 2的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!