C語言中的 指標

2021-09-25 02:12:48 字數 2322 閱讀 4295

讓你不再害怕指標

要了解指標,或多或少會有一些複雜的型別,讓人思緒萬千。其實要理解複雜型別其實很簡單,乙個型別裡會出現很多運算子,但他們和普通的表示式一樣,也有優先順序。所以:

從變數名處起,與運算子優先順序結合,一步一步分析。

先從簡單的型別開始分析:

int p// 這是乙個普通的整型變數

int *p// 從 p 處開始,先與 * 結合,說明 p 是乙個指標,再與 int 結合,說明指標所指向的內容類 型為 int 型,所以所以 p 是乙個返回整型資料的指標

int p[3]// 首先從 p 處開始,先於 [ ] 結合,說明 p 是乙個陣列,再與 int 結合,說明陣列裡的元素是整形的,所以 p 是乙個由整形資料組成的陣列

int *p[3]// 首先從 p 處開始,先於 [ ] 結合,因為其優先順序比 * 高,所以 p 是乙個陣列,再與 * 結合,說明陣列裡的元素是指標型別,然後再與 int 結合,說明指標所指向內容的型別是整形的,所以 p 是乙個由返回整型資料的 「指標」 所組成的陣列

int (*p)[3]//首先從 p 處開始,先與 * 結合,說明 p 是乙個指標,這裡( ) 是為了改變優先順序,然後與 [ ] 結合,說明指標所指向的內容是乙個陣列,然後再與 int 結合,說明陣列裡的元素是整形的,所以 p 是乙個指向 由整型資料組成的陣列 的指標

int **p//首先從 p 開始,先與 * 結合,說是 p 是乙個指標,然後再與 * 結合,說明指標所指向的元素是指標,然後再與 int 結合,說明該指標所指向的元素是整型資料

int (*p)(int)//從 p 處開始,先與指標結合,說明 p 是乙個指標,然後與 ( ) 結合,說明指標指向的是乙個函式,然後再與 ( ) 裡的 int 結合,說明函式有乙個 int 型的引數,再與最外層的 int 結合,說明函式的返回型別是整型,所以 p 是乙個指向 有乙個整型引數且返回型別為整型的 函式 的指標

已經差不多了,理解了這幾個型別,其他的都迎刃而解。不過寫程式時一般不會用太複雜的型別,會大大降低**的可讀性,請慎用。只針對刷題、搞深入研究之類的。

以後,每遇到乙個指標,都應該問問:這個指標的型別是什麼?指標指的型別是什麼?該指標指向了**?(重點注意

關於以上再作乙個小總結(以上可能字數太長不易理解)

int *p;p 為指向整型量的指標變數

int *p[n];p 為指標陣列,由 n 個指向整型量的指標元素組成。

int (*p)[n];p 為指向整型二維陣列的指標變數,二維陣列的列數為 n

int *p()p 為返回指標值的函式,該指標指向整型量

int **pp 為乙個指向另一指標的指標變數,該指標指向乙個整型量

int (*p)()p 為指向函式的指標,該函式返回整型量

閱讀說明閱讀組合說明符的規則是從裡向外例如:

上面給出了由內向外的閱讀順序,下面來解釋它:

(1)識別符號 a 被說明為

(2)乙個指標變數,它指向

(3)乙個函式,它返回

(4)乙個指標,該指標指向

(5)乙個有 10 個元素的陣列,其型別為

(6)指標型,它指向

(7)int 型資料

因此 a 是乙個函式指標變數,該函式返回的乙個指標值又指向乙個指標陣列,該指標陣列的元素指向整型量。

C 語言中的指標

指標是 c 語言中的精華,正確靈活的運用指標,可以表示複雜的資料結構,動態分配記憶體,方便使用字串和陣列,呼叫函式返回多結果,直接處理記憶體單元等等。位址就是記憶體的編號,如果拿旅店作為記憶體,那麼每個房間號其實就相當於位址了。當程式編譯時,就會對變數分配記憶體單元,分配時按變數型別分配大小。經過編...

C語言中的指標

隨著程式語言的越來越多,但c語言在程式語言中的地位似乎始終沒有改變,其中得益於c語言中的指標,可以直接去操作記憶體位址與暫存器,執行效率也高,在嵌入式領域運用得尤其廣泛。對於初學者來說指標是c語言中很難翻越的一座大山,指標的掌握程度直接關係到c語言的掌握程度,其實指標並不是那麼高不可攀,只是紙老虎而...

C語言中的指標

指標是c語言中非常重要的東西,書本上寫了好多來解釋裡面的原理,當年老師也跟我們講了好多這方面的東西,一直就是感覺沒有聽明白。直到我看到了指向指標的指標,我建立了自己的理解,不知道是否正確,但是基本能解決遇到的問題。int p p i p。type p,宣告指標變數,type 例如int 告訴計算機p...