- 论坛徽章:
- 0
|
记得<C缺陷>里面说那个倒霉void(*signal(int,void(*)(int)))(int)的时候大概是这么说的:
首先 外面是 void(*xxx)(int),即 (*xxx)(int) 返回类型为void,(*xxx)为该函数的`函数名',即:xxx为指向此类型函数的指针,解引用后是个函数
然后 xxx是signal(int,void(*)(int)),也就是说,signal()是一个函数,返回类型是xxx的类型,即上面说的[指向void()(int)类型函数的指针]
里面的void(*)(int)就不解释了
也就是说 void 是最终的结果,导致这个结果的是 (*signal(int,void(*)(int)))(int)这样一个函数 而这样一个函数本身也是通过signal()`计算'得到的
按照这样的说法,char * p 意思其实是 (*p) 是个char , char是p解引用得到的,p 理所当然就是个指向char的指针
至于 char * p [] 与 char (*p) [] 的问题,我的理解是:`[]' 优先级高于 '*' (这应该没什么问题) ,于是 `char * p []' 意思就是 (*(p[0]))是个char ;而 `char (*p)[]' 的意思是 ((*p)[0]) 是个 char
这样看来 还是 char *p 比较符合类型定义的本意,甚至可以写成 char (*p) |
|