分析C语言的声明的优先级

C语言的声明是C语言区别于其他语言的一大亮点,也是一大难点。本文针对的是有一些C语言基础的同学。所以,如果有同学还不清楚C语言的变量的声明和定义的,现在可以关闭本页面了

本文主要讲解的是C声明的优先级规则。

如下所示:


下面通过一个例子来具体说明上面的声明优先级。

char * const *(*next)();

刚看这个声明,比较晕,不知,从何下手,但是按照上面的优先级顺序,一步一步解析,答案很简单;

A 首先,从变量名开始,看变量名“next”,注意它是直接被括号所括住的。

B 1、把括号当做一个整体,可以得出”next是一个指向...的指针“。接着我们看括号外的左边有星号*,右边有括号(),该选择哪一个?这个时候看第二步;

    2、右边的括号优先级要高一些,所以,得出“next是一个函数指针”,如果是函数的话,得要有传入参数,和返回参数,我们可以看出,没有传入参数,但是,有返回参数。

    3、处理前缀“*”,得出指针所指向的内容。

C 最后 ,把“char * const"解释为指向字符的常量指针。


以上分析的结果是:“next是一个指针,它指向一个函数,该函数返回另一个指针,该指针指向一个类型为char的常量指针”。

如果对上面结果理解有困难的话,可以打个比方,next指向的指针的函数设为func,func的返回类型为一个指针p,该指针指向一个常量指针cp,cp指向的内容类型为char类型。注意,这里的const修饰的p所指向的内容,也即cp,而不是最后的char类型。


如果你已经弄明白了上述的过程,现在有一个实例:

char * (* c[10])(int **p);

按照上面的步骤来:

1.c是数组[0...9],数组元素是指针

2.跳出当前的括号,注意后面的括号,表示,数组中的元素是函数指针,即数组中的元素指针指向函数,函数的传入参数是int **p形式。

3.函数的返回类型是char *类型。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值