c语言中,常量是存放在内存中吗?

来源:百度知道 编辑:UC知道 时间:2024/05/10 14:33:52
有两种观点:1。常量是值不变且不用存放在内存中。2。常量和变量一样也是存放在在内存中的。哪种对?
《c语言程序设计教程,实验与练习》 杨开城 张志坤 编著
人民邮电出版社 (2002年8月第一版) ----该书中的第25页 对常量的定义 :c语言中,值不能被改变并且不用存放在内存中的量称为常量。
《C语言程序设计》 林小茶 编著 中国铁道出版社 -----该书中第15页 写道:与变量一样,常量也是存储在内存中的,

两者矛盾吗??

关键的是,常量和变量是放在不同的"段"(section)里,程序一旦加载,常量/变量自然都在内存里了。
常量和全程变量,通常放在初始化段;局部变量,通常在栈里;
还有一种情况,比如汇编里的立即数(mov ax, 12),它是直接放在指令里的,也即是代码段里.

在程序的运行过程中,把需要处理的数据存放在内存储器中,称始终保持不变的数据为“常量”,称存放可变数据的存储器单元为“变量”,其中的数据称为变量的值。

1.常量

常量是一个命名的数据项,在整个操作过程中其值保持不变。如PI值,即3.1415926535是数值型常量。 VFP定义了如下类型的常量:

数值型常量,如:20,16,100,1
字符型常量,用单引号或双引号括起来的字符串,如:"ABCD"
逻辑型常量,只有两种:.T.和.F.
日期型常量和日期时间型常量,如:{^1999-04-22},{^1999-04-24 10:00am}
2.变?

const int a=5;
#define a 5
前者是真正的常量,编译器处理的时候类似于变量,当然也是保存在内存中的。因此编译完成以后实际上是从一个地址当中,取得值“5”。
后者是一个宏定义,编译器会在预编译时,将a替换成5。

就是保存在内存里面!
任何程序都是这样啊!
只要一运行,他就要把需要的数据载入到内存里面,然后与CPU交互使用!
不然运行速度会很慢的!

常量在编译阶段被替换为常量的值(也就是直接量)