typedef 的几种用法

  1. 函数指针:

    看这样一个声明:void *(*)(void *)(void*(*act[3])(void *))(void *(*)(void *), void *);
    晕了没?

    用typedef分解下:

    原声明等价于:
    typedef void *(*Func)(void *);
    Func (Func[3])(Func, void  *);
    即act是一个数组,该数组有3函数指针的成员,每个成员作为函数指针,返回一个void *(*)(void *)型的函数指针,同时每个成员作为函数指针其参数有两个,第一个参数的类型是void *(*)(void *)型的函数指针,第2个参数的类型是void *;
    分解诀窍: 先找名字,再右,后左,右看遇到[]是数组,遇到()是函数,左看遇到*是指针,最后再细心让括号配对就行;

    注:关于复杂声明, K&C的《The C Programming Language》第5章指针与数组,专门写了个dcl递归下降语法分析程序来分解复杂声明,很是有趣;

  2. 结构体
    typedef struct node_t{
      node_t *next;
      void *data;
    } *link;
    等价于:
    typedef struct node_t *link;
    struct node_t{
      node_t *next;
      void *data;
    };

   

原文地址:https://www.cnblogs.com/mathzzz/p/2592041.html