C/C++中const关键字剖析
一、const修饰普通变量
const修饰普通变量时是很容易理解的,就变量的值不可以改变。但是在C和C++中还是有区别的,同时const
修饰的普通变量在不同的存储区域时也有不同的效果。
1、C和C++中const修饰的普通变量的区别
const int val = 10; <==> int const val = 10;
上述两个变量的定义实际上是等价的,其中的const修饰的是变量val。表示变量val的值不可以进行改变,
但是val的值一定就不能改变吗?这是不一定的,它在C和C++中效果不同。
1)在C语言中,编译器只做语法检查,只要不通过val去修改变量的值即可。因此,我们可以通过一个指针去修
该val的值。
2)在C++中用const修饰普通变量,则变量无论是通过任何方式都无法修改的。
2、const修饰的局部变量和全局变量
const修饰的局部变量存放在栈区,在C语言中可以通过指针来进行修改,但是在C++中不可以修改,从上述
图片中可以看出;const如果修饰全局变量,全局变量存放在静态存储区的.data段,则无论在C还是在C++中都
无法修改变量的值,否则会发生段错误。
二、const与指针变量
注意:当const修饰指针变量时,只要关注const修饰的是 “指针变量”还是“*指针变量即可”。
1、常指针变量
常指针变量指的是限制通过指针去改变其指向目标的值,但是指针的指向可以改变。
语法:
const 数据类型 *指针变量名; <==> 数据类型 const *指针变量名;
此时const修饰的是 “ *指针变量 ”
2、常指针
常指针表示指针变量的指向不可以改变。
语法:
数据类型 * const 指针变量名;
此时const修饰的是“指针变量”,则指针变量的指向不可以改变。