Typedef与#define的区别

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;只有一个是指针 
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值