2009年12月10日 星期四

指標非常淺的淺談

由於對 C/C++ 實在很不熟悉, 最近就跑去唸 K&R 的 The C Programming Language, 作者在指標章節提供了一個 declaration 的簡單定義如下:


dcl: optional *'s direct-dcl
direct-dcl: name
(dcl)
direct-dcl( )
direct-dcl[optional size]

借用書內的圖表, 可以比較清楚的知道他的關係如下:

Figure 1-1: ( *collection[] )()


依照 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, 即使表示形式寫的很複雜, 也可以分解的出大概的意思.


1 則留言: