• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

define和const的区别

编程经验 CTO 12005次浏览 0个评论

之前有同学题过这个问题,我就想为何要会提这个问题?大概因为他们都与常量有关吧!define是宏定义,它可以把一个标识符变成一个常量,而const是一个修饰符,它可以修饰一个变量为常类型,使其不可被修改!今天我们就把这两个类型做一个区别。

 

首先,本质上两者不同,define修饰出来的是常量!并且是真常量!

而const修饰的是假常量,它本质还是变量!只不过编译器不让你修改!

 

下面仔细讲解,为什么说define修饰出来的是真常量呢?因为,define是宏定义,是宏替换!意味着程序在编译前期会进行文本替换,例如代码define PI 3.1415926 这句话,编译器会将代码中所有出现PI的地方全部用3.1415926替换,然后在进行编译,所以本质它就是一个常量嘛!

至于const呢,我们知道const一般修饰于定义变量的前面,比如cosnt int a = 10,意味着a就一直是19,是是一个不可修改的变量了。

往后试图给a重新赋值都会引发错误。这就是const修饰之后的结果,但请注意,这里不可修改的原因其实是编译器在做检查,检查是否有修改这块内存上的值,一旦有就会报错,所以从根本上说,cosnt修饰的变量依然是一个变量!只不过编译器不让你修改而已!

 

整体总结如下:

类别 define cosnt
何时处理 编译期间进行宏替换 编译期间检查是否有修改
谁来执行 由系统判断是否被修改 由编译器限制
存储位置 数据常量在内存只读区 变量在哪就在哪里

 

怎么样,这下大家顿悟了吗?

 

大家有任何问题欢迎联系我们,一起探讨研究!

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明define和const的区别
喜欢 (31)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)