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是一个指向函数的指针,该函数返回另一个指针,它指向一个只读的指向字符的指针。