zoukankan      html  css  js  c++  java
  • typedef用法总结。

    引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html

    首先#define为预处理,与typedef是完全不同的机制。详细机制尚未完全明了。请参考前人文章。

    用法一:指针变量代替。

    char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量

    typedef char* PCHAR;  // 别名不建议全大写

    PCHAR pa, pb;   // 这是两个char类型的指针。

    原文认为这种方法很有用。但个人认为这种方法容易引起误解。如果要使用,需要在变量名中有指针的隐含指示。

     

    用法二:struct的使用省略。

    struct tagPOINT1

     {
        int x;

        int y; 
    };

    struct tagPOINT1 p1;

    如果使用typedef,则可以这样:

    typedef struct tagPOINT
    {
        int x;

        int y;
    }POINT;

    POINT p1; // 这样就比原来的方式少写了一个struct。不建议使用此方式。但需要能够理解他人代码中这样的使用。

    用法三:用typedef来定义与平台无关的类型。(个人认为最常用的用法)

    REAL代表最高精度的浮点数。

    typedef long double REAL;  //最高支持lond double 平台

    typedef double REAL;//最高支持double 平台

    typedef float REAL;//最高支持float 平台

    也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

    用法四:对类,定义一个容易理解的别名。

    例子1:

    class ABC{ /*code*/ };

    typedef ABC Rectangle;

    你看到ABC肯定不知道这个类是做什么用的。但当你看到Rectangle最少你应该知道这个类是一个矩形。

    PS:不建议任何人构建ABC这种类。但你无法控制所有人。所以有时候Typedef是一个很好的选择。

    例子2:

    template< class typeA > class ABC{ /* code */ };

    typedef < calss AAA >ABC  RectangleA;

    typedef < calss BBB >ABC  RectangleB;

    此例子中变量名非常不推荐。因此为上份工作的代码。所以只能使用AAA和BBB代替。但从中应该也能看到用法。

    用法五:函数指针的别名。

    格式:typedef  返回类型(*新类型)(参数表)

    typedef char (*ptrFun)(int);   

    ptrFun pFun;   

    char getInt(int a){ return a;} 

    int main()

    {

      pFun = getInt;

      cout<< (*pFun)(2) << endls;

      return 0;

    }

    暂未使用此方式来编写代码。但存在即合理。本质上,和类的别名无什么区别。

    一个未试验的猜想:是否可以将 *ptrFun 变为 ptrFun ?

     

    解答原文的一个问题:(仅个人认知,不代表绝对正确。欢迎讨论)

    原文案例:

    typedef char * pStr;

    char string[4] = "abc";

    const char *p1 = string;

    const pStr p2 = string;

    p1++;

    p2++;

    原文中,指出P2++将会出错。

    1:pStr是一个自定义的类型,在前面加const将会使我们无法改变这个类型的值。

    2:反推论,这个pStr是保存的是一个指针。具体内容为指针地址。当对指针地址进行++时,会改变具体内容。所以报错。

  • 相关阅读:
    工作经验和学历孰优孰劣
    关于c语言文件的基本操作1
    从头学起Expert C Program 1
    栈和堆——c语言中
    浅谈进程和线程的区别
    通用试题库组卷策略算法
    marquee标记用法及在asp.net中的应用(来自于网上)
    在ASP.NET页面中显示自动生成图片的两种方法
    《ASP.NET高级编程》电子版下载地址
    从中央气象台抓取天气预报
  • 原文地址:https://www.cnblogs.com/zheng39562/p/4164301.html
Copyright © 2011-2022 走看看