博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
define与const(未完待续)
阅读量:1870 次
发布时间:2019-04-26

本文共 746 字,大约阅读时间需要 2 分钟。

(1) 编译器处理方式不同

  define宏是在预处理阶段展开。

  const常量是编译运行阶段使用。

(2) 类型和安全检查不同

  define宏没有类型,不做任何类型检查,仅仅是展开。

  const常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

  const常量会在内存中分配(可以是堆中也可以是栈中)。

(4)const 可以节省空间,避免不必要的内存分配。例如:

#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ……
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。

(5)define表示的常量;而const修饰的其实是变量只是const修饰词使其表示为常量,其本身的性质还是变量。我们在学习C的时候,经常会看到:如果一个变量用了const来修饰的话,我们就不能改变这个变量的值。对滴,只是因为它不能改变所以就把他也称为常量,但实际上的确是变量;

但是为什么
这里写图片描述
有人跟我说,这是因为编译器有自动纠错的功能,因此不会报错;(尴尬的还是选择相信了);

(6)const还可以放在指针中使用,,具体下次再续

你可能感兴趣的文章
php如何将base64数据流文件转换为图片文件?
查看>>
JavaScript 的addEventListener() 事件监听详解!
查看>>
JavaScript的DOMContentLoaded事件和load的区别?
查看>>
PHP+JavaScript实现图片预览上传功能开发!
查看>>
JSONView - Chrome插件安装详解!(谷歌浏览器插件)!
查看>>
上传图片到阿里云OSS和获取上传图片的url的详解 !
查看>>
webstorm 和 phpstorm 有什么区别呢?做 WEB 开发用哪个好?
查看>>
常见位运算
查看>>
武大学生用python敲出樱花开放 | 附源码
查看>>
【中文教程】简单粗暴入门TensorFlow 2.0 | 北大学霸出品
查看>>
经典面试题:如何保证缓存与数据库的双写一致性?
查看>>
一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文
查看>>
硬货 | Redis 性能问题分析
查看>>
Kafka为什么这么快?
查看>>
灵魂四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?
查看>>
一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
查看>>
酸爽!IDEA 中这么玩 MyBatis,让编码速度飞起!
查看>>
已拿 Offer!字节跳动面试经验分享
查看>>
Windows路由表透析
查看>>
Java LockSupport 实战
查看>>