識別C 指標型別的正確姿勢

2021-10-10 14:05:57 字數 805 閱讀 5111

昨天在看譚浩強的c++的時候,覺得指標這塊雖然分塊闡述:關於指標定義、指標變數、陣列與指標、字串與指標、函式與指標等有所闡述,但在分類以及如何辨別方面沒有乙個清晰的方法和思路。為了對這一塊內容有更深的理解,整理一下關於指標辨認的方法。

一般情況下,指標結合性是從右到左的。從這點來看,我們首先提取出要辨認的p,從p開始,向外擴充套件,先看右邊最近項。

例如float ((p)(int,int,float))(int)

從p開始,右邊為括號,結合左邊形成p,是乙個指標。那麼指標的指向呢?再看右邊,乙個參數列,說明p是乙個指向函式的指標。實際上,至此我們分析出來,(p)(int,int,float)是乙個形式為(p)(),定義乙個指標,指標指向函式入口。再結合左邊星號表示該函式返回值為乙個指標,那這個指標指向**呢?再看右邊,引數列表,表明指標指向的是乙個函式,結合起來表示,該返回值為乙個指向函式的指標,返回值為float型。

總結:p是乙個指向函式的指標,接受三個引數(int,int,float),並且返回乙個指向函式的指標,該函式接受乙個int,並返回乙個float值。

最後做兩個小練習:

void * ((fp1)(int))[10];

double (((*fp2)())[10])();

解答:fp1是乙個指向函式的指標,該函式接受乙個整形引數並且返回乙個指向10個void指標陣列的指標

fp2是乙個指向函式的指標,該函式無引數,且返回乙個指向含有10個指向函式指標陣列的指標,這些函式不接受引數且返回double值。

本篇文章參考:指標型別辨別

關於指標陣列和陣列指標的區別,這篇文章講的很清晰:

二維陣列

C 指標型別識別正確姿勢

指標是c和c 中程式設計最複雜也是最有技巧的部分,但對於新手來說,指標無疑是最致命的,讓很多人望而退步。不過很多事情都是從陌生開始,然後漸漸熟悉起來的,就像交朋友一樣,得花點時間去培養感情才行。不過指標這位朋友可比較高冷,只花一點點時間恐怕不夠,得多學多練多接觸,它才會給你展示它熱情的一面。好了,廢...

正確規避野指標姿勢

新手必看,大神繞道勿噴。謝謝!break在前幾天寫 時,在windows上完美執行,但是放到android上執行時發現有記憶體洩漏,導致閃退。這個錯誤源於break寫 時不小心使用了野指標。於是寫下這篇文章加深印象,以防以後再犯。看下面一段 class a void main ps 這sb 是誰寫的...

RESTful的正確姿勢

很多人都有這樣的疑問 rest 英文 representational state transfer,簡稱rest 描述了乙個架構樣式的網路系統,比如 web 應用程式。它首次出現在 2000 年 roy fielding 的博士 中,roy fielding是 http 規範的主要編寫者之一。在目...