zoukankan      html  css  js  c++  java
  • typedefine 用法

    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
    用法:
    变量别名

    例如:

    单个变量:

    typedef int size;

    size a; 等价于 int a;

    数组:

    typedef char line[10];

    line text; 等价于 char line[10];

    指针

    typedef char* pstr;

    pstr p; 等价于char* p;

    替换复杂声明

     typedef & 复杂的变量声明

    理解复杂声明可用的“右左法则”:
      从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。

    int (*func)(int *p);
      首 先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func是一个指针;然后跳出这个圆括号,先看右边,又遇到圆括号(只有函数后面才跟形参圆括号),这说明 (*func)是一个函数,所以func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回值类型是int,此处就是声明函数。
      int (*func[5])(int *);
      func 右边是一个[]运算符,说明func是具有5个元素的数组;func的左边有一个*,说明func的元素是指针(注意这里的*不是修饰func,而是修饰 func[5]的,原因是[]运算符优先级比*高,func先跟[]结合)。跳出这个括号,看右边,又遇到圆括号,说明func数组的元素是函数类型的指 针,它指向的函数具有int*类型的形参,返回值类型为int。

    对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了。

    例如:

    int *(*a[5])(int, char*);

    //pFun是我们建的一个类型别名
    typedef int *(*pFun)(int, char*);
    //使用定义的新类型来声明对象,等价于int* (*a[5])(int, char*);
    例如:
    void (*b[10]) (void (*)());
    //首先为上面表达式加粗部分声明一个新类型
    typedef void (*pFunParam)();
    //整体声明一个新类型
    typedef void (*pFun)(pFunParam);
    //使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());
    平台无关性
    typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:
    typedef long double REAL;
    在不支持 long double 的机器上,该 typedef 看起来会是下面这样:
    typedef double REAL;
    并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:
    typedef float REAL;
    你不用对源代码做任何修改,便可以在每一种平台上编译这个使用 REAL 类型的应用程序。
    typedef和#define区别
    #define只是简单的字符串替换而typedef则是为一个类型起新名字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换
    它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
    例如:typedef register int FAST_COUNTER; // 错误
  • 相关阅读:
    jQuery横向手风琴
    jQuery宽屏游戏焦点图
    手风琴式相册图片展开效果
    鼠标悬停图片分享按钮动画
    jQuery水平滑动菜单
    jQuery图片水平滑动延迟加载动画
    jQuery悬浮焦点图宽屏
    jQuery自定义美化下拉框
    纯CSS3垂直动画菜单
    面向服务与微服务架构
  • 原文地址:https://www.cnblogs.com/feichangnice/p/11928892.html
Copyright © 2011-2022 走看看