c++中定义类型和#定义的区别是什么

  介绍

本篇文章为大家展示了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++中定义类型和#定义的区别是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

c++中定义类型和#定义的区别是什么