一、const是什么
const 是一种变量修饰符,修饰紧跟其后的变量,使得该变量为常量值,不能够被修改。
const int n = 5
int const n = 5
两行代码是一样的,const修饰n,使得n为一个常量值(不修饰其后的数据类型int,而是直接修饰变量n),
所以这种写法就是错误的:
const int n = 0;
n= 5
再看下面const与指针结合的这个例子,能够大大加深大家都const是一种”变量”修饰符的理解。
const int * p
int const *q
根据上面的论述,我们知道const是一种变量修饰符,所以在此const修饰*p、*q,我们都知道*p,*q指的是指针指向的内存中的值,加上const修饰符,指的是*p,*q中的值不变,为一个常量。如果想使指针为常量怎么办呢?可以这样修饰:
int * const p = &n
根据cosnt修饰紧跟其后的变量定义,在此const修饰p,而p为一个指向变量n地址的int型指针,所以在此p为一个常量指针,即指针指向的地址不能被修改。但是地址中存放的数据可以修改。
二、const的作用
1、指明变量或者对象不能够被修改,保护被修饰的东西,防止被意外修改,增加程序的健壮性。
2、节省空间,减少不必要的内存分配(编译器通常不会为const修饰的变量分配内存空间,而是直接将变量保存在符号表中,使得它成为一个编译期间的常量,这就避免了对变量的内存读写操作,效率也是相当的高的)。
三、为什么不使用#define
预处理命令(#define)虽然也可以进行值替换,但是预处理有一点不好即预处理命令只是进行简单的值替换,并不进行语法的检查,所以会存在一定的隐患。
文章借鉴了bigloom的博客,想要详细了解const作用的同学可以看下他的博客:http://blog.csdn.net/bigloomy