const是constant的缩写,是永恒不变的意思,在编程语言中我们经常把它修饰的变量称为常量,修饰的变量也不能被改变。
今天我们具体来说一下这个关键字它修饰的变量是不是变成了常量?到底修饰的变量能不能被改变?
其实const修饰的变量我们把它叫做常量这样的叫法是有问题的,更确切地说我们应该把它叫做——只读变量。为什么这样说呢?看一下下面的代码:
constinta=50;
intarray[a];
看出来我想表达的意思了么?你可以在自己的编译器上把它运行一遍,在C语言中编译会报错,为什么?因为我们数组怎么定义的,我们定义的时候必须指定其元素个数,这一点从侧面验证了在C语言中const修饰的a它依旧是一个变量而已,只不过它变成只读的属性了,但是在c++里对const的含义做了扩展这里我们就先不讨论。
接下来我们在探讨另外的一个问题,那就是被const修饰的变量可以被修改么?或许你经过刚刚上面的讲解觉得他修饰的变量属性变成一个只读的变量那还怎么改变呢,肯定不能变呀!但是我想告诉你的是其实在C语言中其实被const修饰的变量也可以被改变。接下来我们看一下怎么改变一个const修饰的变量。
在这之前我想让大家回想一下C语言的一个无所不能的东西——指针。在C语言中赋予指针的权利太大了。这可能也是C语言历史遗留下来的bug吧。好废话不多说接下来我们来看下面的代码:
看完上边的代码不知道你们有何感想,我用的是Linux系统和gcc的编译器,编译过程有警告但是没有出错,其实我们回想一下C语言指针的作用我们可以知道其实是可以改变的,我们这样想不管你是不是被const所修饰,那你存在内存上的是不是有一个地址,那我们用一个指针指向这个地址并对指针的值进行赋值是不是也没什么毛病,就这样是可以实现修改const修饰的变量,但是在c++中对指针的限制使得指针不能修改const修饰的变量。我们看一下运行的结果。
现在你对const有新的了解了么?如果你有不一样的见解可以共同探讨一下。