1、int (*func) (int *p) 《函式指標》
分析:
(1).*func: 表示func是乙個指標;
(2).(*func) (): 表示(*func) 是乙個函式;
(3).func: 表示指向這類函式的指標,這類函式帶有int*型別的引數,並且返回值是int型別;
結論:
func是乙個指向函式的指標,該函式有乙個int*引數,並返回乙個整型數。
2、int(*func) (int *p, int (*f)(int *)) 《函式指標》
分析:
(1).*func: 表示func是乙個指標;
(2).(*func) (): 表示(*func) 是乙個函式;
(3).func: 表示指向這類函式的指標,這類函式帶有兩個引數,且返回值是int型別。其中,乙個引數是int*型別,另乙個引數是函式指標;
結論:
func是乙個指向函式的指標,該函式有一兩個引數,乙個是int*,另乙個是int*型別的函式指標,該函式返回乙個整型數。
3、int (*func[5]) (int *p)
分析:
(1).(*func [5]): 表示func是含有5個元素的陣列指標;
(2).(*func [5]) (): 表示(*func [5]) 是乙個函式;
(3).func: 表示陣列中的元素是指向這類函式的指標,這類函式有乙個int*型別的引數,且返回值是int型別;
結論:
func是有5個指標的陣列,該指標指向乙個函式,該函式有乙個int*型別的引數並返回乙個整型數。
4、int (*(*func)[5]) (int *p)
分析:
(1).*func: 表示func是乙個指標;
(2).(*func) [5]: 表示這個指標指向乙個陣列;
(3).(*(*func) [5]): 表示陣列中的元素是指標;
(4).(*(*func) [5]) (): 表示陣列的元素是指向函式的指標;
結論:
func是乙個指向陣列的指標,這個陣列的元素是函式指標,這些指標指向帶有int*型別形參,且返回值是int型別的函式。
5、int (*(*func) (int *p)) [5]
分析:
(1).*func: 表示func是乙個指標;
(2).(*func) (): 表示func是乙個指向函式的指標(即函式指標);
(3).(*(*func) ()) ——> 替換為:(*f);
(4).(*f) [5]: 表示f是乙個指向陣列的指標;
(5).將f替換回去;
結論:
func是乙個函式指標,這類函式有乙個int*型別的形參,返回值是指向陣列的指標,所指向的陣列的元素是具有5個int型別元素的陣列。
that』s all.到這裡,就分析完我們在平時工作中可能會用到的較為複雜的指標,看完是什麼感覺呢?思路清晰?or 矇圈?淡定,淡定,小夥伴們,經過上述例子的分析,我來總結一下如何解讀複雜指標,只有做到正確無誤的解讀才能在以後的工作中熟練的使用哦。
【tips】:
使用「右左法則」:首先從未定義的識別符號(本文中指的是func《亦可理解為變數》)最裡面的圓括號看,然後向它右邊看,再向左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裡面所有的內容,就跳出圓括號。重複以上過程,直到整個宣告解析完畢。
希望通過這兩篇對指標專門的講解,我們能夠熟練的解讀出任意指標的宣告。沒有什麼捷徑哦,就是練習,練習,練習。
C語言複雜指標理解
學習和使用c語言近十年了但對c語言的複雜指標依然有些迷糊索性花點時間分析一下,下面是一些心得,希望對讀者有所幫助 取the c programming language中的兩個例子以分析 char x char x 3 5 若直接讓我們說出這兩個x分別是什麼意思往往會有一些困難,這裡我們可以使用代入...
複雜指標判別
右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的。右左法則 首先從最裡面的圓括號看起,然後往右看,再往左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦...
複雜指標讀法
c inta 乙個整形 int a 乙個指標,批向乙個整形 整形指標 int a 乙個函式,反回乙個整形指標 int a 10 乙個陣列,裡面存放著整形指標 int a 乙個指標,指向乙個函式,該函式返回整形 int a 乙個指標,指向乙個陣列,陣列裡放著整形 int a 乙個整形 int a 乙個...