C语言声明优先级 const char* char * const

来源:互联网 发布:淘宝卖家怎么发微淘 编辑:程序博客网 时间:2024/05/01 05:22
1、先从简单的入手
const char * var和char const * var和char * const var
可以这么理解
const char var 表示var是个char类型的常量
char * var 表示var是一个指针,指向一个char
const char * var 表示var是一个指针,指向一个char,这个char是一个常量。
便于记忆:const 在*前面,表示指针指向的对象时常量
         *在const前面,表示指针本身是常量。



2、C语言声明的优先级规则,理解了这个规则,再复杂的声明表达式都可以轻松K.O.
优先级规则表

A 声明从它的名字开始读取,然后按照优先级依次读取

B 优先级从高到低的次序依次为
B.1 生命中被括号括起来的部分
B.2 后缀操作符优先级较高,()表示函数,[]表示数组

C.3 前缀操作符:*表示指向...的指针

C 如果const和volatile关键字后面紧跟着类型操作符,如intlong,它作用于类型操作符,其他
情况下,作用于它相邻的指针星号
现在,我们来分析一个相对比较复杂的表达式 int * const * (*test)();
分析过程:
1 看到变量名test,并且注意到它直接被括号括住
2 括号内是一个整体,所以,test是一个指针,指向某某对象
3 然后考虑括号外,由于后缀操作符()的优先级较高,所以选择()进行分析
4 由于后缀操作符()表示函数,所以test为一个指针,它指向一个函数,这个函数的入口参数为空,返回值暂时未知,由前面的int * const *决定
5 分析int * const * 由又向左,根据最右边的*得出返回值是一个指针,指向(int * const)
6 分析int * const,由于*在const前面,所以指针本身是常量,所以得出返回值是一个常量指针,这个指针指向一个int*
所以得出上述表达式是:test是一个函数指针,这个函数的入口参数为空,返回值是一个常量指针,它指向一个int*,也就是int类型的指针
1 0
原创粉丝点击