c语言中define与float区别,C语言中typedef与define的这些区别值得关注

本文详细介绍了C语言中typedef和#define的区别,包括功能、处理时机、具体用法以及指针操作上的差异。typedef用于定义新的数据类型名称,提供了一定的类型检查,而#define是预处理指令,进行简单的字符串替换,不进行类型检查。在定义指针时,typedef能更好地处理const修饰符的情况。了解这些差异有助于提升C语言编程的准确性和效率。
摘要由CSDN通过智能技术生成

97eccb261887f10b337121acc3a348ac.png请看下文

C语言中typedef与define有些功能有点类似,比如它们均可以给一个对象取个别名。因此也让许多初学者产生迷惑,分不清楚到底有什么区别,今天作者来总结一下供大家参考,看了本文相信大家能够掌握。

1、从功能上来说有不同

define指令用于宏定义,可以提高源代码的可读性,为编程提供方便,一般放在源文件的前面部分。

typedef用来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型、数组类型、指针类型以及自己定义的结构体类型、共用体类型、枚举类型等。一旦我们在程序中使用typedef定义了自己的数据类型名称,我们就可以像使用int、float和double等基本数据类型一样来使用它。

2、从处理时机来说有不同

define是预处理指令,并不是编译过程中处理,而是在编译之前就已经完成了。它只是简单而机械的字符串替换,并不做正确性检测,若有错误,只能在编译这些已经展开的源程序时才能够被发现并报错。

typedef所定义的新名字具有一定的封装性,是在程序编译阶段处理的,编译时有类型检测功能。但它并不实际分配内存空间。

3、从具体用法来说有不同

define用于定义常量、变量、编译开关等。详细用法请见作者的另一篇文章,名为“C语言中的define预处理指令老手都是这样用,你全都掌握了吗?”,本文不再赘述。

typedef用于为不同数据类型定义新名字,详细用法请见作者的另一篇文章,名为“C语言中typedef用法总结,看完就能像编程老手一样熟练运用”,本文不再赘述。

4、从对指针的操作来说有不同

define和typedef两者都可以定义指针类型,但使用定义后的类型名去定义变量时,结果有差异。定义如下:

#define PCHAR1 char*

typedef char* PCHAR2;

(1)指针差异1,直接定义变量

举例说明如下:

PCHAR1 pc1, pc2;

PCHAR2 pc3, pc4;

上面两行语句目的是想把pc1、pc2、pc3、pc4都定义成指向char型数据的指针,结果pc2不符合定义成指针的预期,其实际为char型普通变量,其它三个为指针变量,符合预期。

为什么导致这个结果呢?原因很简单,define就是一个宏定义,在编译预处理阶段直接字符串替换,直接将PCHAR1替换成char*,替换后变成如下形式:

char * pc1, pc2;

很显然,pc1是指针变量,pc2为普通变量。

(2)指针差异2,与const修饰符连用。

举例说明如下:

char c1=‘A’;

char c2=‘B’;

char c3=‘C’;

const PCHAR1 pc5; //语句1

const PCHAR2 pc6=&c2; //语句2

语句1中,const限定的是指针变量pc5所指向空间的值,即空间的值不可被更改;但指针变量pc5的值可以更改,即其可以指向其它空间。

语句2中,const限定的是指针变量pc6的值,即pc6的值不可更改;但其所指向空间的值是可以更改的。通常在语句2中需要给pc6赋初值,否则编译时会有警告,提示所使用的pc6未初始化。

导致此差异的原因依然是define只是简单的字符串替换,语句1实际上是如下形式:

const char * pc5; //语句1

如果按照语句2形式的定义,想要用const限定空间的值,而不是限定指针,只需要重新定义PCHAR2即可,定义可修改为如下形式:

typedef const char* PCHAR2;

关于typedef与define的用法区别今天就总结到这,如果大家有任何疑问请留言探讨。我是“C语言知识传播者”,志在瞄准C语言,挖掘和总结C语言的难点和痛点,给C语言编程爱好者和本领域从业人员提供参考,我会用心总结C语言知识的点点滴滴,你的关注是我持续创作的动力,请关注我,收藏本文、转发并点赞,希望得到你们的持续关注,谢谢!

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值