C++中typedef和#define简介
本文基于《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简介的更多相关文章
- c++中typedef、define、const、inline之间的区别
1.typedef和#define的区别 typedef int* pInt; , b = ; const pInt p1 = &a; //p1是常量指针 pInt const p2 = &a ...
- C++中typedef和define的区别
typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...
- typedef 和 #define 的区别
本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...
- typedef与#define的区别
1. typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...
- typedef和#define的用法与区别
typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...
- typedef 与define 的区别
typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...
- typedef 优于 #define
案例一: 通常讲,typedef要比#define要好,特别是在有指针的场合.请看例子: typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2 ...
- typedef和#define的区别
转自:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html 一.typedef的用法在C/C++语言中,typedef常用 ...
- typedef与define
一.typedef用法 typedef常用来定义一个标识符及关键字的别名,它生效是在语言编译过程,但它并不实际分配内存空间.typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性” ...
随机推荐
- Linux命令应用大词典-第29章 SELinux管理
29.1 sestaus:显示SElinux的状态 29.2 getenforce:显示当前SELinux的应用模式 29.3 setenforce:修改SELinux的应用模式 29.4 getfa ...
- linux 学习总结---- mysql 总结
用户的创建 ---->修改 ---->删除用户 create alter drop (数据定义语言 DDL) 授权: insert update delete grant *.* revo ...
- LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor
1.题目大意 Given an array of integers, every element appears twice except for one. Find that single one. ...
- Python3 Tkinter-Place
1.绝对坐标 from tkinter import * root=Tk() lb=Label(root,text='hello Place') lb.place(x=0,y=0,anchor=NW) ...
- VBA基础之Excel 工作表(Sheet)的操作(二)
二. Excel 工作表(Sheet)的操作1. Excel 添加工作表(Sheet) 方法名 参数 参数值 说明 Add Before 工作表名称 在指定的工作表前面插入新的工作表 After 工作 ...
- Rescue(BFS时间最短 另开数组或优先队列)
Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M ...
- Thunder团队第三周 - Scrum会议6
Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 代秋彤照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblogs ...
- [solution]xdebug正确配置,但不显示错误信息
一开始以为是配置问题,其实不是,折腾了好久,貌似中文网页很少有人提到这事,更别提解决之道! 最好还是用英文关键词google之:得如下网页 https://bugs.launchpad.net/ubu ...
- Java中ArrayList与数组间相互转换
在实际的 Java 开发中,如何选择数据结构是一个非常重要的问题. 衡量标准化(读的效率与改的效率) : ① Array: 读快改慢 ② Linked :改快读慢 ③ Hash:介于两者之间 实现Li ...
- 团队作业7——第二次项目冲刺(Beta版本)-第二篇
1.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 孙斌22030 后台代码 2.燃 ...