zoukankan      html  css  js  c++  java
  • c++中typedef

    今天在学习sizeof的时候偶遇typedef这个关键字,抱着不弄明白不死心的心态,在网上搜了些资料,加上自己的理解写下这篇typedef,权当自己用来见证自己进步和备忘的。

    typedef 照我理解就是取别名。

    取别名一:

    typedef char * SChar;

    这里给char * 类型的指针重新取了哥SChar的别名,则在以后的代码中要定义Char * 就可以这样写 SChar 如:

    char * a 等价于 SChar a;

    为结构体取别名:

    typedef struct test1

    {

      char a;

    }Test;

    则 Test代表了 Struct test1,

    Test a 等价于 struct test1 a;

    取别名三,通过取别名实现平台兼容性

    例如:

    比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

    typedef long double REAL;

    在不支持 long double 的平台二上,改为:

    typedef double REAL;

    在连 double 都不支持的平台三上,改为:

    typedef float REAL;

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

    取别名四:为复杂函数指针或者类型取一个语义简单明了的别名。

    如:定义函数指针时可以这样定义: int (*fn1)(int *p);如果这样写就是定义了一个名字为fn1的指向一个返回类型为int,参数类型为int指针的函数指针,如果接下来还要定义一个类似的函数指针还得这样写int (*fn2)(int *p),这样写可读性和修改性不是很强。如果我们用typedef 就解决了以上问题。

    typedef int (* pFn)(int *p);

    pFn fn1;

    pFn fn2;

    以上等价于上面的定义了两个函数指针。显然这样写代码的可读性明显提高了很多,同时,如果pFn指针的类型变了的话也只要修改typedef处代码即可。

  • 相关阅读:
    android WeakReference(弱引用 防止内存泄漏)与SoftReference(软引用 实现缓存机制(cache))
    android Handler.btionMessage()与Message.obtain()的区别
    android 编译
    android之xmlpullparse解析器
    android之animation
    如何用SQL语句实现Mysql数据库的备份与还原
    android之Volley实现瀑布流
    使用TCP的HelloServer
    java socket编程(网络编程)
    彻底搞懂Python切片操作
  • 原文地址:https://www.cnblogs.com/quandeboke/p/2998784.html
Copyright © 2011-2022 走看看