整理自:http://www.cnblogs.com/heyonggang/p/3199216.html
定义
1.typedef是用来声明类型别名的,使用它一般是为了增加代码的可读性,它可以为一串很长的类型名起一个别名,使用这个别名可以达到与原类型名相同的效果。
typedef int INT;
//以下两行效果相同
int a;
INT a;
2.#define是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行与含义无关的字符串替换。在使用宏定义时要注意括号的使用。
#define ADD(a,b) a+b; //错误
//#define ADD(a,b) (a+b); //正确
int sum=ADD(1,2)*3; //1+2*3
区别
1.typedef是C++的关键字,用来为一个已有的数据类型起别名;#define是C++的宏定义命令,用来定义一个宏定义常量。
2.typedef为一种数据类型起别名,带有一定含义;#define只做简单的字符串替换,不表达任何含义。
#define INTPTR1 int*
typedef int* INTPTR2;
INTPTR1 p1,p2;
INTPTR2 p3,p4;
上段代码中,INTPTR1 p1,p2; 和INTPTR2 p3,p4;两句作用完全不同:
(1)INTPTR1 p1,p2;进行字符串替换后变成int* p1,p2;表示声明一个指针变量p1和一个整型变量p2。
(2)INTPTR2 p3,p4;进行字符串替换后变成int* p1,*p2;其中INTPTR2是具有含义的,说明是一个指向整型数据的指针,p3和p4都为指针变量。