再也不怕C语言的声明了

先抛砖:

  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的常量指针 ”,大功告成。

再也不怕C语言的声明了,布布扣,bubuko.com

再也不怕C语言的声明了

上一篇:Postgresql GIN索引


下一篇:C#多线程编程简述