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
修饰的变量。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。