C++中typedef和#define简介

本文基于《C++ Primer(第5版)》和网上博客,整理而成。

一、类型别名

 类型别名是一个名字,它是某种类型的同义词,有两种方法可用于定义类型别名:typedef、using。

1、关键字typedef

 typedef 它在自己的作用域内给一个已经存在的类型一个别名,编译阶段,会进行类型检查。

1 typedef double wages;   //wages是double的同义词
2 wages hourly;           //等价于double hourly;

注意:使用typedef时,最后要加分号,另外,含有typedef的声明语句定义的不再是变量而是类型别名。

(1)指针、常量和类型别名

 若某个类型别名指代的是复合类型或常量时,要特别注意。

1 typedef char * pstring;
2 pstring a,b;            //a,b都是指向char的指针
3 const pstring cstr=0;   //cstr是指向char的常量指针

针对pstring,其基本数据类型是指针,对第三行代码它实际上相当于char*   const。故不能直接将类型别名替换成它本来的样子,来理解该语句的含义。

注:const和typedef一起出现时,typedef不是仅仅简单的字符串替换。

(2)返回数组指针

1 typedef int arrT[10];   //arrT是一个类型别名,它表示的类型是
2                         //含有10个整数的数组
3 arrT *func(int i);      //func返回一个指向还有10个整数的数组指针

二、#define

 1、define是预处理指令的一种,它用来定义宏,宏只是一个简单的替换,将宏变量所对应的值替换。不做正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

1 #define N 5
2 int main()
3 {
4     cout<<N;  //输出5
5     return 0;
6 }

2、define的容易出现的问题

(1)如:想计算a=10*10,结果输出35

1 #define N 5+5
2 int main()
3 {
4     int a=N*N;
5     cout<<a;        //输出35
6     return 0;
7 }

这是因为define只是简单的替换,所以,a=5+5*5+5。若想计算10*10,可将第一行改为

1 #define N (5+5)

 

另外,两者的作用域不同

1、#define 无论在哪定义过,在其它的地都可以使用
2、typedef 只能在定义的作用域内使用

本文只是简单的说一说,不详细的地方,请见参考。

Ref:

http://www.cnblogs.com/li-peng/p/3853818.html

http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html

http://blog.csdn.net/luoweifu/article/details/41630195

http://www.cnblogs.com/182-7167-2685/p/5125708.html

 

转载于:https://www.cnblogs.com/love-yh/p/7281910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值