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

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的指针


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值