关于Const和Define的区别
常变量。 定义符号变量用#define 指令,它是预编译指令。在预编译后符号常量不存在全部变成3.14 对符号常量的名字是不分配存储单元(这个不分配存储单元我就有点费解 不是很清晰)常变量是占有存储单元的有变量值。 使用角度说常变量有符号变量的有点,而且使用方便、
我最不明白的地方是符号变量不占用存储空间而常变量占用存储空间,可是却说常变量要优于符号变量。。这里很疑惑,可能是我的基础知识薄弱,不清晰存储空间的概念,所以真心求助。帮我解释清楚为什么是占用存储空间的要比不占用存储空间的要好。。。。另外求大神给小弟指点下存储地址。希望通俗下些。这样能便于小弟的理解。。 展开
一、表达意思不同
1、Const:n. 常量,常数; (Const)人名;(罗)康斯特
2、Define:vt. 定义;使明确;规定、n. (Define)人名;(英)德法恩;(葡)德菲内
二、词性不同
1、Const:通常作名词。
例句:For structures and unions to be modifiable lvalues, they must not have any members with the const attribute.
如果要使结构或者联合类型为可更改左值,那么它们不能包含任何具有常量属性的成员。
2、Define:既可以作及物动词,也可以作名词。
例句:So how do you define it?
你是怎么定义它的?
扩展资料:
“Define”的近义词:regulate
1、读音:英 [ˈreɡjuleɪt] 、美 [ˈreɡjuleɪt]
2、表达意思:vt. 调节,规定;控制;校准;有系统地管理
3、相关短语:
REG regulate 控制 ; 校准 ; 节制 ; 调节
Voltage regulate 电压调节方式 ; 电压调节 ; 电压调理方式 ; 速度调节
regulate blood 调节血液 ; 规管血 ; 调节血 ; 正在翻译
4、例句:We have to learn to regulate emotions in our life.
在生活中我们要学会调节自己的情绪。
2024-09-19 广告
你定义一个符号变量:#Define PI 3.14
然后你的程序例如是这样的:float a=PI*PI;定义了一个float变量a,其值是PI*PI。然后你的这个程序经过预编译,变成了:float a=3.14*3.14;3.14原型替换了PI,所以不需要为PI这个符号变量分配内存,定义符号变量的意义只是在于方便理解,你看到3.14这个值不一定想到他是圆周率,但是看到PI你就知道他是3.14.
常变量其实和普通变量一样,都是需要分配内存的,但是常变量的值是不能改变的。
为什么说常变量优于符号变量,因为常变量安全:
例如:你定义一个符号变量#Define PI 3.14+3.14
然后你的程序例如是这样的:float a=PI*PI;定义了一个float变量a,其值是PI*PI。然后你的这个程序经过预编译,变成了:float a=3.14+3.14*3.14+3.14; 3.14+3.14原型替换了PI。
如果你定义常变量:Const float PI=3.14+3.14;如果你的程序:float a=PI*PI;定义了一个float变量a,其值是PI*PI。然后你的这个程序经过预编译,变成了:float a=(3.14+3.14)*(3.14+3.14);
所以常变量更安全,不会出现上面的歧义。
const的话就是有数据类型,发生错误的概率比较小
非常感谢你的回答,便于我的理解,不过上面那位的回答真心特别透彻,对了我还想请教下
#define PI 3.14 //预处理后 占用代码段空间
const float PI=3.14; //本质上还是一个 float,占用数据段空间
我对代码段空间 和数据段空间不是很清晰能给讲解下么 谢谢
代码段空间就是代码存放的空间,代码编译后并不是像我们所见的那么语言化,应该知道机器语言吧。编译就是把我们的程序段编译成二进制的机器语言,这些二进制代码就存储在代码空间,代码空间一旦编译完就是固定不变的。
数据段空间就是存储数据用的,比如程序里有 int i ;那么相应的就会在数据空间里开辟一个int空间用于存储数据。
不知道这样讲还明白不?这些纯属个人的理解,也可能有些出入。。
学过单片机的话这个问题应该很好明白。单片机里面的ROM和RAM空间就是类似这个,再大一点类比的话就好比电脑的操作系统与程序(不是很恰当)。