先抛砖:
char * const * (* next) ();
对于这种复杂的声明形式,你明白它的确切意思吗?
C语言声明的优先级规则:
A、声明从它的名字开始读取,然后按照优先级顺序依次读取。
B、优先级从高到低依次是:
1、声明中被括号括起来的那部分
2、后缀操作符:
括号()表示这时一个函数,
方括号 [ ] 表示这时一个数组
3、前缀操作符:
星号 * 表示 “ 指向···的指针 ”
C、如果 const 或 volatile 关键字的后面紧跟类型说明符(如 int, long 等),那么
它作用于类型说明符。在其他情况下,const 或 volatile 关键字作用于它左边紧邻
的指针星号。
用优先级规则解决上面的声明
A 首先,看变量名 “ nex t” ,并注意到它被括号扩住
B.1 所以,先把括号里的部分作为一个整体,得出 “ next 是一个指向···的指针 ”
B.2 B.2的规则告诉我们,优先级较高的是右边的函数括号,所以得出
“ next 是一个函数指针,指向一个返回···的函数 ”
B.3 然后,处理前缀 " * " ,得出指针所指的内容。
C 最后,把 “ char * const ” 解释为指向字符的常量指针
把上述分析结果加以概括,这个声明表示 “ next 是一个指针,它指向一个函数,
该函数返回另一个指针,该指针指向一个类型为char的常量指针 ”,大功告成。