C专家编程--分析C语言的声明
1。 理解C语言声明的优先级规则
char* cpp; //cpp是一个指向char的指针
const char* cp; //cp是一个指向有const限定符的char的指针
cpp = cp; //这样是合法的,因为“左操作数具有右操作数所所指向类型的限定符(空),再加上自身的限定符(const)。
cp = cpp; //!!这样是不合法的。因为它们指向的类型不一样,一个是指向char,一个指向const char
A。 声明从它的名字开始读取,然后按照优先级顺序依次读取。
B。 优先级从高到低依次是:
B。 1。 声明中被括号括起来的那部分
B。 2。 后缀操作符:
() 表示这是一个函数
[] 表示这是一个数组
B。 3。 前缀操作符: 星号*表示“指向...的指针“
C。 如果const和(或)volatile关键字的后面紧眼类型说明符(如int, long等),那么它作用于类型说明符。在其他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。
所以有:
char* cpp; //cpp是一个指向char的指针
const char* cp; //cp是一个指向有const限定符的char的指针
cpp = cp; //这样是合法的,因为“左操作数具有右操作数所所指向类型的限定符(空),再加上自身的限定符(const)。
cp = cpp; //!!这样是不合法的。因为它们指向的类型不一样,一个是指向char,一个指向const char
实例分析:
char* const *(*next)();
首先提取next,它被括号包住,表示“next是一个指向...的指针”
接着重新从步骤2开始,得出“next是一个函数指针”,该函数参数列表为空
接着走到步骤5,得出“该函数返回一个指向...的指针”
最后剩下char* const表示“指向字符的常量指针”
所以char* const* (next)()声明:next是一个指向函数的指针,该函数返回另一个指针,它指向一个只读的指向字符的指针。