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[];
    
  • 相关阅读:
    网络拓扑
    OSI 7层模型和TCP/IP 4层模型
    第一范式 第二范式 第三范式 BC范式 第四范式
    医院 信息科
    李纳斯•托瓦兹
    所谓绅士,就是做自己该做之事,而不是想做之事。
    活着
    开头词
    人际题目
    人际关系
  • 原文地址:https://www.cnblogs.com/jt2001/p/5197188.html
Copyright © 2011-2022 走看看