您的位置:首页 > 编程语言 > C语言/C++

Typedef与#define的区别

2016-10-09 22:47 190 查看

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;只有一个是指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言