只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。
const修饰的只读变量
const int Max = 100;
int Array[Max] ;
c文件中,编译器会提示出错,而在.cpp文件中则顺利运行。
这也从侧面证实在C语言中,const修饰的Max仍然是变量,只不过是只读属性罢了;
节省空间,避免不必要的内存分配,同时提高效率
#define M 3 //宏常量
const int N = 5 ; //此时并未将N放入内存中
int i = N; //此时为N分配内存,以后不再分配
int I = M ; //预编译期间进行宏替换,分配内存
int j = N ; //没有内存分配
int J = M; //再进行宏替换,又一次分配内存
const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,
#define定义的宏常量在内存中有若干个备份。
#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。
#define宏没有类型;
修饰一般变量
修饰数组
修饰指针
const int *p;
int const *p;
int * const p;
const int * const p ;
修饰函数的参数 void Fun(const int *p); ------ 当不希望这个参数值在函数体内被意外改变时使用;
------ 告诉编译器 *p 在函数体中不能改变;
修饰函数的返回值
const int Fun(void) ; 返回值不可被改变
在另一链接文件中引用const只读变量:
extern const int i ; //正确
extern const int j = 10 ; // 错误,只读变量的值不能改变