本篇文章为大家展示了c++中定义类型和#定义的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1. typedef关键字强>
,,typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。
,,,如:
typedef int 智力; typedef char CHAR;
就为int和CHAR分别起了一个别名,那么在程序中使用int, int和,达到的效果是等同的。在使用typedef时应注意一下几点:
, 1)类型是为一个数据类型起一个新的别名,如typedef int int;那么要告诉我的是int表示整型,typedef int * INTPTR;则告诉我们INTPTR是一个指向整型变量的指针类型,这点与#定义是决然不同的,# 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 =1; int b=2; int c=3; const INTPTR1  p1=,; const INTPTR2 P2=, b; INTPTR2 const  p3=, c;
上述代码中,const INTPTR1 p1表示p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容;而对于const INTPTR2 p2,由于INTPTR2表示是一个指针类型,因此用常量去限定,表示封锁了这个指针类型,因此p2是一个指针常量,不可使p2再指向其他的内容,但可以通过p2修改其当前指向的内容,INTPTR2 const p3同样声明的是一个指针常量。
2)对于宏定义:
# define INT int unsigned INT ;
,这种用法是可行的;而
typedef int 智力; unsigned INT ;
是绝对错误的用法。
<强> 2。# define宏定义强>
,,#定义是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行不关含义的字符串替换。在使用宏定义时,如果稍不注意就会发生错误,而且这个错误往往是你意想不到的。如:
# define 添加(a, b), a + b int i=1; int j=2; int k=3; int s=添加(i, j) * k;
程序可能想求算的是(i + j) * k的结果,然而这段程序并没有达到这种效果,由于宏替换只是进行简单的字符串替换,那么添加(i, j) * k相当于我+ j * k,并不是想象中的(i + j) * k。
上述内容就是c++中定义类型和#定义的区别是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。