const关键字精确的说代表只读(readonly),其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。const关键字的目的是为了取代预编译指令,消除它的缺点,同时继承它的优点。
1. const修饰的只读变量
定义const只读变量,具有不可变性。
const修饰的只读变量必须在定义的同时初始化,否则后期进行赋值将出现错误。这也体现了const的只读属性。
2.避免不必要的内存分配,提高效率
编译器通常不为普通的const只读变量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。
const与define的一些区别:
2.1在内存中的区别
const定义的只读变量给出对应的内存地址
define给出的是立即数
2.2 使用过程中的区别
const定义的只读变量在程序运行过程中只有一份拷贝(全局只读变量,存放在静态区)
define定义的宏常量在内存中有若干个拷贝
2.3 编译期间的区别
const修饰的只读变量在编译的时候确定其值
define宏定义在预编译阶段进行替换
2.4 修饰的数据的区别
const修饰的只读变量具有特定的类型
define宏没有类型
3.const修饰一般变量
const修饰简单类型的只读变量,这种只读变量在定义时,修饰符和类型说明符可以互换
int const i = 1; 或者const int i = 1;
4.修饰数组
数组与一般变量相同
5.修饰指针(最先修饰谁,谁就是不可变)
const int * p; //p可变,p指向的对象不可变(p可变,*p不可变,因此可以改变p的指向来修改*p)
int const *p; //p可变,p指向的对象不可变(p可变,*p不可变,因此可以改变p的指向来修改*p)
int * const p; //p不可变,p 指向的对象可变(p不可变,*p可变)
const int * const p;//指针p和p所指向的对象都不可变
6.修饰函数参数
const修饰符修饰函数参数,当不希望这个参数值被函数体内以外改变时使用
7.修饰函数的返回值
const修饰符也可以修饰函数的返回值,返回值不可改变