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

一、类型别名

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

1、关键字typedef

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

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

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

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

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

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

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

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

(2)返回数组指针

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

二、#define

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

 #define N 5
int main()
{
cout<<N;  //输出5
return ;
}

2、define的容易出现的问题

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

 #define N 5+5
int main()
{
int a=N*N;
cout<<a; //输出35
return ;
}

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

 #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

C++中typedef和#define简介的更多相关文章

  1. c++中typedef、define、const、inline之间的区别

    1.typedef和#define的区别 typedef int* pInt; , b = ; const pInt p1 = &a; //p1是常量指针 pInt const p2 = &a ...

  2. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  3. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  4. typedef与#define的区别

    1.  typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...

  5. typedef和#define的用法与区别

    typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...

  6. typedef 与define 的区别

    typedef和#define的用法与区别   typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...

  7. typedef 优于 #define

    案例一: 通常讲,typedef要比#define要好,特别是在有指针的场合.请看例子: typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2 ...

  8. typedef和#define的区别

    转自:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html 一.typedef的用法在C/C++语言中,typedef常用 ...

  9. typedef与define

    一.typedef用法 typedef常用来定义一个标识符及关键字的别名,它生效是在语言编译过程,但它并不实际分配内存空间.typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性” ...

随机推荐

  1. Linux命令应用大词典-第29章 SELinux管理

    29.1 sestaus:显示SElinux的状态 29.2 getenforce:显示当前SELinux的应用模式 29.3 setenforce:修改SELinux的应用模式 29.4 getfa ...

  2. linux 学习总结---- mysql 总结

    用户的创建 ---->修改 ---->删除用户 create alter drop (数据定义语言 DDL) 授权: insert update delete grant *.* revo ...

  3. LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor

    1.题目大意 Given an array of integers, every element appears twice except for one. Find that single one. ...

  4. Python3 Tkinter-Place

    1.绝对坐标 from tkinter import * root=Tk() lb=Label(root,text='hello Place') lb.place(x=0,y=0,anchor=NW) ...

  5. VBA基础之Excel 工作表(Sheet)的操作(二)

    二. Excel 工作表(Sheet)的操作1. Excel 添加工作表(Sheet) 方法名 参数 参数值 说明 Add Before 工作表名称 在指定的工作表前面插入新的工作表 After 工作 ...

  6. Rescue(BFS时间最短 另开数组或优先队列)

    Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M ...

  7. Thunder团队第三周 - Scrum会议6

    Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 代秋彤照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblogs ...

  8. [solution]xdebug正确配置,但不显示错误信息

    一开始以为是配置问题,其实不是,折腾了好久,貌似中文网页很少有人提到这事,更别提解决之道! 最好还是用英文关键词google之:得如下网页 https://bugs.launchpad.net/ubu ...

  9. Java中ArrayList与数组间相互转换

    在实际的 Java 开发中,如何选择数据结构是一个非常重要的问题. 衡量标准化(读的效率与改的效率) : ① Array: 读快改慢 ② Linked :改快读慢 ③ Hash:介于两者之间 实现Li ...

  10. 团队作业7——第二次项目冲刺(Beta版本)-第二篇

    1.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 孙斌22030 后台代码 2.燃 ...