指針數組/數組指針

指針數組:
指針數組是數組,是一個存放指針的數組。
這裏寫圖片描述
這裏的a[4]就是一個指針數組,其中各元素的類型都是int*。

數組指針:
數組指針是指針,這個指針指向一個數組。
這裏寫圖片描述
這裏的P是一個指針,指向一個內部元素類型爲int型的數組。

上面兩個例子都是非常簡單的形式,那麼當遇到複雜形式時,該如何判斷呢?
我們可以這樣來看它:
我們看變量名先和什麼結合,它和什麼先結合,那麼它最終的類型就是什麼。比如:int * a[4] 中,變量名a先和[]結合(爲什麼是先和[]結合,不是先和 * 結合呢?因爲[]的優先級高於 * ),那麼它最終就是一個數組。同理,int( * p )[4]中,p先和 * 結合,那麼它最終就是一個指針。然後具體的類型再逐層向外分析。

函數指針:
函數指針是指針,指向一個函數。
比如:int ( * pfun)(int, int) ; pfun先與 * 結合,它就是一個指針,這個指針指向一個函數,這個函數有兩個int型參數並且返回值類型爲int。

函數指針數組:
函數指針數組是數組,數組中的元素是指針,這些指針都指向函數。
比如:int( * pfunarr[5])(int, int) = { NULL ,myadd, mysub, mymul, mydiv, };其中pfunarr先與[5]結合,則其是數組,再與 * 結合,則是指針數組,再有int型返回值與兩個int型參數,於是確定其爲返回值爲int型,參數爲兩個int型的函數指針數組。
舉個應用例子:

指向函數指針數組的指針:
由以上函數指針數組的說明我們認識了函數指針數組,那麼這個就好理解了,也就是有一個指針指向這個函數指針數組。在上個例子的基礎上舉例。
比如:int ( * ( * ppfunarr)[5])(int, int) = &pfunArr; 其中ppfunarr先與 * 結合,確定其是指針;再與 [5]結合,是指針數組;再與 (int, int)結合,是函數指針數組,再與 * 結合,確定其爲指向函數指針數組的的指針。

綜合以上說明畫個圖:
這裏寫圖片描述

發佈了41 篇原創文章 · 獲贊 37 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章