Typedef与#define的区别
最近学习数据结构时,书上源码往往是ElementType类型,无法直接使用,需要手动定义为int或其它类型,这时候,就出现了两种方式
#define ElementType int //将所有的ElementType替换为int
typedef int ElementType; //给int取一个别名叫ElementType
虽然在小程序中,这两者效果一致,但是却有着一些大区别。
- Markdown和扩展Markdown简洁的语法
Typedef的好处
- 构造新类型
typedef int Array5[5]; //构造一个长度为5的整形数组类型
Array5 a1, a2; //等同于 int a1[5], a2[5];
区别
- 处理时间#define
#define的处理是在编译过程之中,过多的#define操作会使得编译时间增长。typedef在C++中被当作语句处理,占用运行时间,过多的typedef会使得程序运行时间增长。
- 作用域不同: typedef有其自己的作用域,而#define一次使用后,作用于全局。
/* typedef 与局部变量一样,有固定的作用域 */
void Fun1( void )
{
typedef int a; //将int取别名为a
a Length = 0; //同 int Length = 0;
}
void Fun2( void )
{
a Length = 0; //错误!找不到a的定义
}
/* #define作用于全局 */
void Fun1( void )
{
#define a int
a Length = 0; //同 int Length = 0;
}
void Fun2( void )
{
a Length = 0; //正确,定义过a
}
- 对指针的操作不同
Typedef int * pint; //将int*取别名为 pint
Const pint p; //p不可更改,p指向的内容可以更改,相当于 int * const p;
pint s1, s2; //s1和s2都是int型指针
#define Pint int * // 出现Pint的地方替换为int *
Const Pint p; // p可以更改,p指向的内容不能更改
// 相当于 const int *p;或 int const *p
Pint s3, s4; // 相当于int * s3,s4;只有一个是指针