• 如何解析C语言的声明


    一个声明:int *p[]

    分为四部分:

    (1)p

    (2)p右面的符号(可以什么都没有)

    (3)p左面的符号(可以什么都没有)

    (4)最左面的类型说明符

    解读一个声明先从p开始,然后的顺序是:右左右左右左右左····

    看完了p,然后从p的右边开始看符号(因为优先级高的符号 [ ]和 ( ) 是放在右边的),如果有符号,就和p先结合。

    看完右边的符号(如果有的话)后,就决定了p是什么,比如p右面是[],那么p就是数组,如果是(),那么p就是函数,如果什么都没有,那么p就是变量。

    这时,就到p左边的符号发挥作用了(左边要么是 * ,要么就什么都没有)。

    最后发挥作用是则是类型说明符(int,char,long······)。

    实战演示:

    int (*p)();

    先看p
    右面,由于有一个括号把p和*括起来,所以这个声明的最内层是(*p),所以p右面没有东西,那么p就是个变量。
    左面,(*p)左面是*,所以p是一个指针变量。
    右面,(*p)的右面是一个(),所以p这个指针,指向的是函数。
    左面,什么都没有了。
    最后是类型符,int,所以,p是一个指针变量,指向函数,函数返回值是int类型。


    char (*(*x())[])();

    先看x
    右面,(),x是一个函数
    左面,*,函数返回值类型是指针
    右面,[],函数的返回值是指针,该指针指向数组
    左面,*,数组内存放的数据是指针
    右面,(),数组内的指针指向的是函数(函数指针)
    左面,指针指向的函数的返回值是char

    char (*(*x[3])())[5];

    x
    右面,[3],x是一个数组,数组内有三个元素
    左面,*,数组内的元素是指针
    右面,(),指针指向的函数
    左面,*,函数的返回值类型是指针
    右面,[5],指针指向的是数组,指向的数组容量是5
    左面,char 数组内的元素是char类型

    最后说一句,真不知道这样的声明定义出来的东西谁能看懂,我反正是不会用的。

  • 相关阅读:
    DENIED Redis is running in protected mode
    Redis接口的调用
    Redis复制
    Redis安全
    Redis持久化
    Redis简单示例
    【T11】提防对等实体的不友好动作
    【T10】记住,TCP__IP不是轮询的
    Python中的with语句
    postgreSQL中timestamp转成date格式
  • 原文地址:https://www.cnblogs.com/feipeng8848/p/8593702.html
Copyright © 2020-2023  润新知