首先从C语言中的const开始说:
在C语言中,const关键字是指定义一个常量,比如:
以上两种定义方式是等价的,都是指定义一个值为10的常量a。
然后说引入指针定义之后的变化:
举例const int * b;
其意思是定义了一个指针b,这个b指向的是一个变量或者常量(皆可,假设指向a吧),那么也就是说其中b的指向可以变,但不可以通过指针b来修改a的值。(注意:面下程序中b是常量,a是指针)
举例int * const b;
其意思是定义了一个指针b,这个b指向的是一个变量或者常量(皆可,假设指向a吧),那么也就是说其中b的指向不可以变,但可以通过指针b来修改a的值。(注意:面下程序中b是常量,a是指针)
其实从排列组合可以发现,显然const int *三者不是只有这么两种排列
其中
无 * int const、* const int 、const * int写法
而int const * 与const int * 作用一致,
另外,const int * const就是既不能改变指针指向,也不能通过其改变所指向的变量的值。
而从之前int const *对于改变const量的值时的运行结果我们也会发现即使是const的值依旧可以使用指针来修改。接下来我们运行一个更一般的程序。
这里我们可以看见即使是号称常量的const也是可以改变的。那么int arr[const量]的时候也自然会出错。
然后我们来看一个C++程序
可以发现a的值不能修改,而*p的值却改变了。
在C语言中定义一个const量之后会在常量区开辟栈空间。而C++则是有一个符号表,将常量的名字(比如a)和它的值(比如10)放在一个表格里,一一对应,相应的a也就没有地址。如果对一个常量取地址(以上面的程序*p为例),编译器会临时开辟一个空间temp(假如它叫temp吧),让这个指针存放这个临时空间的地址。*p=20也就是改变的临时开辟的temp变量。
也就是说,C++中的const是真的常量,也就可以定义int arr[const 量];
转载请标明出处,原文地址:https://blog.csdn.net/come_from_pluto