08.18 令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

前言

令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

更多C/C++學習資料,請私信我“代碼”,即可獲取

在 C 語言中,指針是精華所在了,那麼我們總是覺得指針是最難理解的。它也是筆試面試中必問的知識點之一,今天我們就來看看那些複雜難懂的指針是怎麼閱讀的。

左右法則

令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

更多C/C++學習資料,請私信我“代碼”,即可獲取

在閱讀指針相關的函數中,我們來具體看看它到底是怎樣的,

  1. 首先從最裡層的圓括號中未定義的標識符看起;
  2. 先往右看再往左看;
  3. 遇到圓括號或方括號時可以確定部分類型,並調轉方向;
  4. 重複 2和 3 步驟,直至閱讀結束。那麼我們下來以代碼為例進行分析.

案例閱讀

定義如下指針,一次帶著大家做一下分析。

令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

更多C/C++學習資料,請私信我“代碼”,即可獲取

案例分析

  • int (*p)(int);==> p;為指針,指向函數,指向的函數有個int型參數,返回值為int型
  • int (*p1)(int*, int (*f)(int*));==> p1 為函數指針,指向的函數有int*,f 為第二個參數,它是函數指針,指向的函數參數為int*,返回值為int;;; 返回值類型為int
  • int (*p2[5])(int*);==> p2 為數組,有5個元素,每個元素是指針,指向函數,類型為int(int*)
  • int (*(*p3)[5])(int*);==> p3 為指針,數組指針,指向的數組有5個元素,這5個元素為指針,是函數指針,指向的函數類型為int(int*)
  • int*(*(*p4)(int*))(int*);==> p4; 為指針,函數指針,參數為int*,返回值為指針,是函數指針,指向的函數類型為int*(int*)
  • int (*(*p5)(int*))[5];==> p5 為指針,函數指針,參數為int*,返回值為指針,指向數組,指向的數組類型為int[5]

利用typedef

我們看到其實經過分析之後,函數也不難,但是這樣它的可讀性很差。我們可以將上面最後一個改用 typedef 進行重命名,如下:

令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

更多C/C++學習資料,請私信我“代碼”,即可獲取

經過重命名之後,我們看到 p5 為一個指針,這個指針的類型為 ArrayType*(int*);而 ArrayType 的類型為 int[5]。我們這樣是不是可讀性一下子就提高了呢。那麼左右法則總結於編譯器對指針變量的解析過程,指針閱讀練習的意義在於理解指針的組合定義,我們可通過 typedef 簡化複雜指針的定義。

令人暈頭轉向的指針!淺談C語言複雜的指針閱讀小技巧

更多C/C++學習資料,請私信我“代碼”,即可獲取

更多精彩


分享到:


相關文章: