const
关键字是 c /c++ 中比较常用的一个关键字,很多书中都将 const
修饰的变量描述为常量,那么一般情况下,常量是不可被修改的。先看如下代码:
const int a = 10;
a = 11;
此时在一些比较智能的 IDE
环境中,例如 vs2019
会直接在变量 a 下出现红线,显示 表达式必须是可被修改的左值 。这也是确实如书中所说,const
修饰的变量无法被修改。但是接下来看另外一段代码
#include <stdio.h>
int main() {
const int a = 10;
int* p = &a;
*p = 11;
printf("%d\n", a);
return 0;
}
上述程序运行结果为 11.
我们通过取得 a
的地址,然后通过指针的方式,重新给 a
赋值,达到了修改 a 的值的目的。这说明 c
语言中的 const
修饰的变量,其值是可以被修改的。其实在 c
语言中,const
是通过编译器检查实现的,它标记 const
变量不能直接被修改。但是并未限制 const
变量的地址的引用, 而只要变量的地址存在被引用的可能,就说明该变量是可以通过指针被间接修改的。所以,只要我们能保证程序在编译过程不出错,那么在程序的运行过程中我们便可以通过指针间接修改该 const
修饰的变量的值。
而在 c++
中const
修饰的变量更加表现为常量。无论是直接还是间接都无法修改 const
修饰的变量。