浅谈C/C++中的typedef和#define
来源:互联网 发布:用友u8数据备份 编辑:程序博客网 时间:2024/05/16 14:28
1.typedef关键字
typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。
如:
typedef int INT;typedef char CHAR;
就为int和char分别起了一个别名,那么在程序中使用INT a;和int a;达到的效果是等同的。在使用typedef时应注意一下几点:
1)typedef是为一个数据类型起一个新的别名,如typedef int INT;那么要告诉我的是INT表示整型,typedef int* INTPTR;则告诉我们INTPTR是一个指向整型变量的指针类型,这点与#define是决然不同的,#define只是作简单的字符串替换,不表达任何含义。如:
#define INTPTR1 int*typedef int* INTPTR2;INTPTR1 p1,p2;INTPTR2 p3,p4;
INTPTR1 p1,p2;和INTPTR2 p3,p4;这两句的效果决然不同。INTPTR1 p1,p2;进行字符串替换后变成int* p1,p2;要表达的意义是声明一个指针变量p1和一个整型变量p2;而INTPTR2 p3,p4;由于INTPTR2是具有含义的,告诉我们是一个指向整型数据的指针,那么p3和p4都为指针变量,这句相当于int* p1,*p2;从这里可以看出,进行宏替换是不含任何意义的替换,仅仅为字符串替换;而用typedef为一种数据类型起的别名是带有一定含义的。
再看下面这个例子:
#define INTPTR1 int*typedef int* INTPTR2;int a=1;int b=2;int c=3;const INTPTR1 p1=&a;const INTPTR2 P2=&b;INTPTR2 const p3=&c;
上述代码中,const INTPTR1 p1表示p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容;而对于const INTPTR2 p2,由于INTPTR2表示是一个指针类型,因此用const去限定,表示封锁了这个指针类型,因此p2是一个指针常量,不可使p2再指向其他的内容,但可以通过p2修改其当前指向的内容,INTPTR2 const p3同样声明的是一个指针常量。
2)对于宏定义:
#define INT intunsigned INT a;
这种用法是可行的;
而
typedef int INT;unsigned INT a;
是绝对错误的用法。
2.#define宏定义
#define是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行不关含义的字符串替换。在使用宏定义时,如果稍不注意就会发生错误,而且这个错误往往是你意想不到的。如:
#define ADD(a,b) a+bint i=1;int j=2;int k=3;int s=ADD(i,j)*k;
- 浅谈C/C++中的typedef和#define
- 浅谈C/C++中的typedef和#define
- 浅谈C/C++中的typedef和#define
- 浅谈C/C++中的typedef和#define
- C/C++中的typedef、#define和const
- 浅淡C/C++中的typedef和#define
- 浅淡C/C++中的typedef和#define
- 详解C/C++中的typedef和#define
- 浅淡C/C++中的typedef和#define
- 详解C/C++中的typedef和#define
- 浅淡C/C++中的typedef和#define
- 【c/c++】typedef和define
- C-define宏和Typedef
- C语言 define和typedef
- C语言 typedef 和 #define
- 如何区别c/c++中的#typedef 和 #define的区别
- 浅谈typedef和#define
- [c/c++] typedef和define的区别
- 湖南省第八届大学生计算机程序设计竞赛CSU--最短的名字
- TCP网络通信/线程池
- 【转载】SAP ABAP中自定义权限对象(AUTHORITY-CHECK)
- 自适应阈值的ransac平面拟合
- 外网远程桌面连接内网服务器教程(超详细)
- 浅谈C/C++中的typedef和#define
- 【转载】BAPI_GOODSMVT_CREATE FUNCITON FOR MIGO 各种移动类型 源代码参考
- python解析页面DOM树形成xpath列表,并计算DOM树的最大深度
- ==与equals()方法
- VMware虚拟机中如何配置静态IP
- android studio ndk编程(二)——两种方式编译
- 关于list集合传到jsp,在struts的select标签中显示下拉列表问题
- Apache Kafka源码分析-模块简介
- [JZOJ5163] 【NOIP2017模拟6.25】PS的烦恼