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[];
    
  • 相关阅读:
    C#’s ~ vs Java’s finalize
    做Java开发这一年
    assertThat, assertEquals, assertTrue
    给Cuke4Duke添加一个AfterAll标签(一):使用Cuke4Duke
    心理问题的根源
    何谓数学
    人生谁看透
    人本主义与自由意志
    哲学的基本问题
    贫穷与教育
  • 原文地址:https://www.cnblogs.com/jt2001/p/5197188.html
Copyright © 2011-2022 走看看