在写代码的过程中,我们常常利用define来定义一些常量元素,起到了对元素内容的封锁作用,使他无法在函数内部被更改。那么如果我们在写参数的时候也想要封锁原数据呢?
这时候我们就可以使用const来定义常变量。
Const在定义常变量时,可以将变量变成只读,即不可写,无法对元素进行赋值。
而数据类型对于const来说是完全透明的,const修饰它的直接右边,即无视它右边的数据类型。
关于这句话我们可以理解为数据类型无论放在const 与 元素名中间还是const之前,二者表示的意义都是相同的
例如const int a=10; 等价于 int const a=10;
Const在修饰指针时就显得比较特殊了,因为它有const int *p=&a; * const int p=&a;
Int * const p=&a三种形式
对于const int *p=&a而言,const修饰的直接右边是*p,因此它对*p起到了封锁作用,如果在下面进行*p=200的解引用就无法完成,但是对p进行地址赋值的p=&a就可以进行
而 * const int p=&a中,const修饰的直接右边则是p,因此它对p起到了封锁作用,如果在下面进行*p=200的解引用就能够完成,但是对p进行地址赋值的p=&a就无法进行。
最后要说的是关于const的权限传递问题,权限可以同等或缩小的传递,不能进行放大传递
这句话可以理解为,如果一个变量被赋予了可读和可写的权限,那么它能够赋予别的元素可读可写或只读或只写权限,而可读权限只能赋予可读权限,可写权限只能赋予只写权限。
关于这个问题的实际应用在后面的博客中会有具体体现。