如何分析复杂的C语言声明

来源:互联网 发布:不实名域名注册商 编辑:程序博客网 时间:2024/04/30 22:13

1. 理解C语言声明的规则

  1. 声明从它的名字开始读取,然后按照优先级顺序以此读取

  2. 优先级从高到低依次是:

    1. 声明中被括号扩起来的那部分

    2. 后缀操作符

      • 括号()表示这是一个函数

      • 放括号[]表示这是一个数组


    3. 前缀参数操作符

      • 星号*表示指向…的指针



  3. 如果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的指针


0 0
原创粉丝点击