• 再也不怕C语言的声明了


    先抛砖: 

    1 char * const * (* next) ( );

    对于这种复杂的声明形式,你明白它的确切意思吗?

    C语言声明的优先级规则:

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

    B、优先级从高到低依次是:

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

      2、后缀操作符:

        括号()表示这时一个函数,

        方括号 [ ] 表示这时一个数组

      3、前缀操作符:

        星号 * 表示 “ 指向···的指针 ”

    C、如果 const 或 volatile 关键字的旁边紧跟类型说明符(如 int, long 等),那么

      它作用于类型说明符。在其他情况下,const 或 volatile 关键字作用于它左边紧邻

      的指针星号。

    用优先级规则解决上面的声明

    A    首先,看变量名 “ next” ,并注意到它被括号扩住

    B.1   所以,先把括号里的部分作为一个整体,得出 “ next 是一个指向···的指针 ”

    B.2   B.2的规则告诉我们,优先级较高的是右边的函数括号,所以得出

         “ next 是一个函数指针,指向一个返回···的函数 ”

    B.3   然后,处理前缀 " * " ,得出指针所指的内容。

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

    把上述分析结果加以概括,这个声明表示 “ next 是一个指针,它指向一个函数,

    该函数返回另一个指针,该指针指向一个类型为char的常量指针 ”,大功告成。

  • 相关阅读:
    跨域访问(nginx)
    mybatis中<set>标签和<trim prefix="set" suffixOverrides=",">
    如何在Oracle中复制表结构和表数据
    Oracle删除重复数据
    Oracle中删除表
    Oracle中on和where的区别
    Java实体类中的类型对应mybatis的jdbcType
    Java 枚举(enum) 常见用法
    关于JS 事件冒泡和onclick,click,on()事件触发顺序
    浅析 SpringMVC 的@PathVariable 和 @RequestParam 和 @RequestBody注解
  • 原文地址:https://www.cnblogs.com/luzhiyuan/p/3614380.html
Copyright © 2020-2023  润新知