C 語言宣告解析:從右讀到左規則看懂複雜型別 - mintrabbitplus
Site icon mintrabbitplus

C 語言宣告解析:從右讀到左規則看懂複雜型別

在 C 語言中,變數宣告的寫法看似簡單,實際上卻藏著相當多細節。當指標、陣列與函式型別交錯出現時,一行宣告往往讓人難以直觀理解其真正含義。為了解決這個問題,從「右讀到左規則」提供了一套清晰且系統化的閱讀方式,幫助我們逐步拆解複雜的型別宣告。

透過掌握這個規則,不僅能提升程式碼的理解速度,也能在撰寫時更精準地表達資料結構。我們將從基礎宣告出發,逐步說明從右讀到左的規則邏輯,並透過實際例子講解,讓你真正看懂每一行 C 語言的變數宣告。

1. C 語言,宣告變數從右讀到左規則
規則步驟:
2. 從簡單到複雜的範例
◉ 範例一:
char p;
解讀步驟:
① 從 p 開始
② 往右:沒有符號
③ 往左:char ➜ char 型別
      ┌---- ② ⇢往右:沒有符號 	
char p;
 |   └----- ① 從 p 開始
 └--------- ③ ⇠往左:char ➜ char 型別
因此,「p 是一個 char 型別的變數」
◉ 範例二:
char *p;
解讀步驟:
① 從 p 開始
② 往右:沒有符號
③ 往左:* ➜ 指標
④ 往左:char ➜ char 型別 
       ┌---- ② ⇢往右:沒有符號
char *p;
 |   |└----- ① 從 p 開始
 |   └------ ③ ⇠往左:* ➜ 指標
 └---------- ④ ⇠往左:char 型別
因此,「p 是一個指向 char 型別的指標變數」
◉ 範例三:
char p[6];
解讀步驟:
① 從 p 開始
② 往右:[6] ➜ 大小為 6 的陣列
③ 往左:char ➜ char 型別
      ┌---- ② ⇢[6] ➜ 大小為 6 的陣列
char p[6];
 |   └----- ① 從 p 開始
 └--------- ③ ⇠往左:char 型別
因此,「p 是一個含有 6 個 char 的陣列」
◉ 範例四:
char *p[6];
解讀步驟:
① 從 p 開始
② 往右:[6] ➜ 大小為 6 的陣列
③ 往左:* ➜ 指標
④ 往左:char ➜ char 型別
       ┌----- ② ⇢[6] ➜ 大小為 6 的陣列
char *p[6];
 |   |└------ ① 從 p 開始
 |   └------- ③ ⇠往左:* ➜ 指標
 └----------- ④ ⇠往左:char 型別
因此,「p 是一個含有 6 個指向 char 指標的陣列」
◉ 範例五:
char (*p)[6];
解讀步驟:
① 從 p 開始
② 往右:遇到 ),折返往左
③ 往左:* ➜ 指標
④ 往左:遇到 ( 折返往右
⑤ 往右:[6] ➜ 大小為 6 的陣列
⑥ 往左:char ➜ char 型別
        ┌----- ② ⇢往右:遇到 ),折返往左
        |┌---- ⑤ ⇢往右:[6] ➜ 大小為 6 的陣列
char (*p)[6];
 |   ||└------ ① 從 p 開始
 |   |└------- ③ ⇠往左:* ➜ 指標
 |   └-------- ④ ⇠往左:遇到 ( 折返往右
 └------------ ⑥ ⇠往左:char 型別
因此,「p 是一個含有 6 個 char 陣列的指標」
◉ 範例六:
char (*p)(int, int);
解讀步驟:
① 從 p 開始
② 往右:遇到 ),折返往左
③ 往左:* ➜ 指標
④ 往左:遇到 ( 折返往右
⑤ 往右:(int, int) ➜ 接受兩個 int 參數的函式
⑥ 往左:char ➜ char 型別
        ┌----- ② ⇢往右:遇到 ),折返往左
        |┌---- ⑤ ⇢往右:(int, int) ➜ 接受兩個 int 參數的函式
char (*p)(int, int);
 |   ||└------ ① 從 p 開始
 |   |└------- ③ ⇠往左:* ➜ 指標
 |   └-------- ④ ⇠往左:遇到 ( 折返往右
 └------------ ⑥ ⇠往左:char 型別
因此,「p 是一個指向接受兩個 int 參數且回傳 char 函式的指標」
◉ 範例七:
char **p;
解讀步驟:
① 從 p 開始
② 往右:沒有符號
③ 往左:* ➜ 指標
④ 往左:* ➜ 指標
⑤ 往左:char ➜ char 型別
        ┌---- ② ⇢往右:沒有符號
char **p;
 |   ||└----- ① 從 p 開始
 |   |└------ ③ ⇠往左:* ➜ 指標
 |   └------- ④ ⇠往左:* ➜ 指標
 └----------- ⑤ ⇠往左:char 型別
因此,「p 是一個指向(指向 char 的指標)的指標」
3. 結論

經過以上範例的練習,相信已經能逐步掌握在 C 語言 中解析變數宣告的方式。透過從「右讀到左規則」的實際應用,能在面對各種指標、陣列與函式組合時,具備清楚拆解與判讀的能力。

Exit mobile version