zoukankan      html  css  js  c++  java
  • 理解复杂的声明

    void (*(*f[])())()
    

    很多人不知道怎么理解这种复杂的东西,我说下我理解的方法罢。

    我遵循的理解方法是“怎么用就怎么声明”。拿上面的作为例子。
    先查优先级表,加几个括号:

    void (*((*(f[]))()))()
    

    它的意义就是:

    (*((*(f[]))()))
    

    是一个没有参数,返回值是void的函数。
    所以

    ((*(f[]))())
    

    的意义就是:指向一个没有参数,返回值是void的函数的函数指针。
    所以

    (*(f[]))
    

    的意义就是:一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数。

    所以

    f[]
    

    的意义就是:一个指向一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数的函数指针。

    所以

    f
    

    的意义就是:一个数组,元素是指向一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数的函数指针。

    很简单吧?
    这样写更好:

    一个数组,元素是
    	指向
    		一个没有参数,返回值是
    			一个指向
    				一个没有参数,返回值是void的函数
    			的函数指针
    		的函数
    	的函数指针
    

    当然,用typedef写更好:

    /*
    一个指向
    	一个没有参数,返回值是void的函数
    的函数指针
    */
    typedef void (*f1)(void);
    
    /*
    指向
    	一个没有参数,返回值是
    		f1
    	的函数
    的函数指针
    */
    typedef f1 (*f2)(void);
    
    /*
    一个数组,元素是
    	f2
    */
    typedef f2 a[];
    
  • 相关阅读:
    element-ui 中Message 消息提示
    MYSQL 常用语法格式
    python 爬取必应每日图片
    linux:文件权限管理
    如何建立自我学习的"触发机制"?
    总有那么一些人,把自己的思想强加给别人
    linux 控制history命令历史记录
    linux apt-get 安装与卸载命令
    ubuntu16.04下 安装java8
    历史与过去是一面镜子,它照到的是你现在的自己
  • 原文地址:https://www.cnblogs.com/jt2001/p/5197188.html
Copyright © 2011-2022 走看看