引用贴: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是保存的是一个指针。具体内容为指针地址。当对指针地址进行++时,会改变具体内容。所以报错。

typedef用法总结。的更多相关文章

  1. C++ typedef用法小结 (※不能不看※)

    C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...

  2. [转载] C++ typedef 用法详解

    typedef的语法描述 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和 double等基本数据类型.从基本数据类型名称上,不能够看出其所代表的物理属性 ...

  3. typedef用法小结

    typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...

  4. c++ --> typedef用法总结

    typedef用法总结 一.四大用途 用途1  定义类型别名,在大量使用指针的地方,typedef更方便 typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // ...

  5. [C++]typedef用法

    参考:C/C++ typedef用法详解(真的很详细) 四个用途 定义一种类型的别名,而不是简单的宏替换 定义struct新对象的别名 定义和平台无关的类型 为复杂声明定义一个简单的别名 typede ...

  6. C++进阶2. typedef用法

    C++ 中的typedef用法 20131011 Typedef在C++中是一个关键字,他的用法有多重,但是自己又说不全面,所以整理一下: 1.用类型的别名 typedef char* PChar; ...

  7. (转)typedef用法

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  8. C语言中typedef用法

    C语言中typedef用法 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等) ...

  9. C++ typedef用法小结

    一.typedef的四个用法 用法一: 为复杂的声明定义一个新的简单的别名.方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版.举例 ...

  10. (转)[C++语法] 关键字typedef用法

    转自http://www.cnblogs.com/SweetDream/archive/2006/05/10/395921.html C/C++语言中的typedef相信大家已经不陌生,本文对C/C+ ...

随机推荐

  1. Javascript进阶篇——( 事件响应)笔记整理

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 鼠标单击事件(on ...

  2. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释

    以下内容转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29632145&id=4616836 jvm区域总体分两 ...

  3. DDD的"waiting until GDB gets ready"

    运行DDD调试器时,出现卡死现象,看软件状态,发现"waiting until GDB gets ready",Google了这个问题,很多都是删除文件夹"~/.ddd& ...

  4. Android studio checkstyle 使用

    首先要安装CheckStyle-IDEA插件,官网:https://plugins.jetbrains.com/plugin/1065 打开Android studio进入设置->Plugins ...

  5. php 变量

    unset() 卸载 静态变量static $i=2; 1.是在所有对函数调用中共享; 2.只有在第一次调用的时候赋值 <?php /* * 一.任何数量的参数 * func_get-args( ...

  6. java性能优化技巧

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量使用final修饰符. 带有final修饰符的类是不可派生的. ...

  7. Dragon Balls--hdu3635(并查集)

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. Boost 1.61.0 Library Documentation

    http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...

  9. Unix/Linux环境C编程入门教程(25) C/C++字符测试那些事儿

    isalnum isalpha isascii iscntrl isdigit isgraph isislower isprint isspace ispunct isupper isxdigit介绍 ...

  10. 实际用户ID,有效用户ID和设置用户ID

    摘自http://blog.csdn.net/guosha/article/details/2679334 实际用户ID,有效用户ID和设置用户ID 看UNIX相关的书时经常能遇到这几个概念,但一直没 ...