1. 理解C语言声明的规则
声明从它的名字开始读取,然后按照优先级顺序以此读取
优先级从高到低依次是:
声明中被括号扩起来的那部分
后缀操作符
括号()表示这是一个函数
放括号[]表示这是一个数组
前缀参数操作符
星号*表示指向…的指针
如果const和volatile关键字的后面紧跟着类型说明符(如int,long),那么 它作用于类型说明符. 其他情况下,从const和volatile关键字作用于它左 侧紧邻的指针星号.
我的理解是const和volatile关键字约束的是它后面的东西,* 例如const char* p表示p是个指向char的指针,这个char是const的, char const * p表示p是个指向const变量的指针同时这个变量是char型, 而char * const p 表示p是const的,这个p是个指针,该指针指向char型.
2. 例子
分析char * const *(*next)();
适用规则 | 解释 |
---|---|
A | 首先看变量next,同时注意到它直接被()括住 |
B.1 | 把括号内的东西看成一个整体 |
B.3 | 表示next为一个指向…的指针 |
B | 考虑括号外的东西,在星号前缀和括号后缀之间进行选择 |
B.2 | 规则告诉我们,优先级高的是后边的函数括号,所以next是一个函数指针,指向一个返回…的函数 |
B.3 | 前缀*表示该函数返回一个指针 |
C | 该指针指向一个const的值,*注意不要理解为该指针是const的!!* |
B.3 | 该常量是一个指向char的指针 |
转载于:https://blog.51cto.com/darksun/1403760