由於對 C/C++ 實在很不熟悉, 最近就跑去唸 K&R 的 The C Programming Language, 作者在指標章節提供了一個 declaration 的簡單定義如下:
dcl: optional *'s direct-dcl
direct-dcl: name
(dcl)
direct-dcl( )
direct-dcl[optional size]
借用書內的圖表, 可以比較清楚的知道他的關係如下:

依照 operator 的 precedence 來作配對,
[] 的 precedence 比 * 高, 所以 collection(Name) 先跟 [] 配對後成 collection[] (direct-dcl),
然後再跟 * 配對成 *collection[] 成 * direct-dcl , 所以變成一個 dcl. 以此類推到最後成為
一個 dcl.
由此, 另外畫了幾個圖形範例
Figure 1-2: char *array[3];

Figure 1-3: char **array[3];

Figure 1-4: char ( *( *array[ ] )( ) )[ ]

由此 rule, 即使表示形式寫的很複雜, 也可以分解的出大概的意思.
Figure 1-4的例子好噁心 XD
回覆刪除