const int N = 5;
//此时并未将N放入内存中
int main()
{
int i = N;
//此时为N分配内存 ,以后不再分配
int I = M; //预编译期间进行宏替换,分配内存
int j = N; //没有内存分配
int J = M;
//在进行宏替换,又一次分配内存
} const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,放在静态区),而#define定义的宏常量在内存中有若干个备份。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。
3.const修饰变量
先忽略类型名(编译器解析的时候也是先忽略类型名),我们看const离哪个近,“近水楼台先得月”,离谁近就修饰谁。 4.const修饰函数的参数 const修饰符可以修饰函数的参数,当不希望这个参数值在函数体内被意外改变时使用
const void fun(const int
i)
告诉编译器i在函数体内不能被改变,从而防止了使用者的一些无意的或者错误的修改 5.修饰函数的返回值
const修饰符也可以修饰函数的返回值,返回值不可被改变
在另一链接文件中引用const只读变量
extern
const int i ;