c/c++中const修饰的变量值变与不变的问题
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
修饰的变量。
相关推荐
往后余生 2020-09-17
CXsilent 2020-09-16
webgm 2020-08-16
Lophole 2020-06-28
sqliang 2020-06-14
xcguoyu 2020-06-13
徐建岗网络管理 2020-06-11
前端开发Kingcean 2020-06-11
cbao 2020-06-10
yezitoo 2020-06-06
bigname 2020-06-04
前端开发Kingcean 2020-05-29
xiaofanguan 2020-05-29
ELEMENTS爱乐小超 2020-05-28
皖林 2020-05-11
wbczyh 2020-05-03
zuihaobushi 2020-04-30