[转载] define和const的区别

[复制链接] [提交至百度]
查看: 37|回复: 3

  离线 

新浪微博达人勋


扫一扫,手机继续看本帖!
已在线9天0小时30分
发表于 2017-1-7 16:49:00 | 显示全部楼层 |阅读模式

立即注册NG,提升编程能力,成为下一个神!

您需要 登录 才可以下载或查看,没有帐号?加入NG 新浪微博登陆

x
本帖最后由 夜丿独觞 于 2017-1-7 10:28 PM 编辑

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


首先,本质上两者不同,define修饰出来的是常量!并且是真常量!
而const修饰的是假常量,它本质还是变量!只不过编译器不让你修改!


下面仔细讲解,为什么说define修饰出来的是真常量呢?因为,define是宏定义,是宏替换!意味着程序在编译前期会进行文本替换,例如代码define PI 3.1415926 这句话,编译器会将代码中所有出现PI的地方全部用3.1415926替换,然后在进行编译,所以本质它就是一个常量嘛!
至于const呢,我们知道const一般修饰于定义变量的前面,比如const int a = 10,意味着a就一直是19,是是一个不可修改的变量了。
往后试图给a重新赋值都会引发错误。这就是const修饰之后的结果,但请注意,这里不可修改的原因其实是编译器在做检查,检查是否有修改这块内存上的值,一旦有就会报错,所以从根本上说,const修饰的变量依然是一个变量!只不过编译器不让你修改而已!



整体总结如下:

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


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

 

                                                  


楼主的其他热帖
[C/C++讨论区] C语言逆向之表达式短路分析及应用
[C/C++讨论区] 给初学者的10点忠诫
[C/C++讨论区] 浅谈C中的malloc和free
[算法综合区] 【算法】挑战编程
[C/C++讨论区] 让指针不再困扰你
[教程下载] 黄老师入门级C语言视频教程带你零基础学C语言




上一篇:数组越界为什么没有出错?
下一篇:C语言的一些误用和知识总结
nextgod.com我是下一个神!
回复
【点击@我】

使用道具 举报

     

  离线 

新浪微博达人勋

已在线2天23小时40分
发表于 2017-1-7 19:52:26 | 显示全部楼层
捧个场!
nextgod.com我是下一个神!
     

  离线 

新浪微博达人勋

已在线3天0小时10分
发表于 2017-1-7 22:22:34 | 显示全部楼层
sonst   拼错了        
nextgod.com我是下一个神!
     

  离线 

新浪微博达人勋

已在线9天0小时30分
 楼主| 发表于 2017-1-7 22:26:25 | 显示全部楼层

抱歉哈,这是转载的,没注意,马上改,。
nextgod.com我是下一个神!
     
您需要登录后才可以回帖 登录 | 加入NG 新浪微博登陆

本版积分规则

回帖奖励

[详情]

快速回复 返回列表 客服中心 搜索 官方QQ群

Copyright  ©2015-2016    Powered by Discuz!& NG论坛   ( 豫ICP备15026783号 )  | |   NG已运行

快速回复 返回列表 客服中心 搜索 官方QQ群
  NG已运行| |