zoukankan      html  css  js  c++  java
  • 如何解析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类型

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

  • 相关阅读:
    网恋现代人的童话
    男人爱女人
    在Web页面中管理服务
    wcf使用入门学习笔记
    table显示细线边框
    wcf整理资料
    启动sqlserver服务的时候报错
    命名规范
    .net中使用xsl文件作为导航菜单
    wcf如何选择绑定
  • 原文地址:https://www.cnblogs.com/feipeng8848/p/8593702.html
Copyright © 2011-2022 走看看