- 論壇徽章:
- 0
|
記得<C缺陷>里面說那個倒霉void(*signal(int,void(*)(int)))(int)的時候大概是這么說的:
首先 外面是 void(*xxx)(int),即 (*xxx)(int) 返回類型為void,(*xxx)為該函數(shù)的`函數(shù)名',即:xxx為指向此類型函數(shù)的指針,解引用后是個函數(shù)
然后 xxx是signal(int,void(*)(int)),也就是說,signal()是一個函數(shù),返回類型是xxx的類型,即上面說的[指向void()(int)類型函數(shù)的指針]
里面的void(*)(int)就不解釋了
也就是說 void 是最終的結(jié)果,導(dǎo)致這個結(jié)果的是 (*signal(int,void(*)(int)))(int)這樣一個函數(shù) 而這樣一個函數(shù)本身也是通過signal()`計算'得到的
按照這樣的說法,char * p 意思其實是 (*p) 是個char , char是p解引用得到的,p 理所當(dāng)然就是個指向char的指針
至于 char * p [] 與 char (*p) [] 的問題,我的理解是:`[]' 優(yōu)先級高于 '*' (這應(yīng)該沒什么問題) ,于是 `char * p []' 意思就是 (*(p[0]))是個char ;而 `char (*p)[]' 的意思是 ((*p)[0]) 是個 char
這樣看來 還是 char *p 比較符合類型定義的本意,甚至可以寫成 char (*p) |
|