C指標分享之「複雜指標」

2021-08-13 16:00:37 字數 1990 閱讀 9494

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 乙個...