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[];
    
  • 相关阅读:
    Unity 之 中文乱码
    fork调用的底层实现
    Linux错误代码含义
    VMware 获取该虚拟机的所有权失败
    Qt ------ QAction
    C++ ------ const迭代器 和 const_iterator的区别
    IAR ------- 在线调试技巧
    STM32 ------ HardFault_Hander 中断函数
    从一张表中复制数据到另一张表中
    分布式任务调度平台xxl-job
  • 原文地址:https://www.cnblogs.com/jt2001/p/5197188.html
Copyright © 2011-2022 走看看