1、什么叫常量
不可以写的叫常量
常量是一个恒定不变的值,它在内存中也是不可修改的。在程序中出现的1、2、3这样的数字或“Hello”这样的字符串,以及数组名称,都属于常量,程序在运行中不可修改这类数据。
——《C++反汇编与逆向分析技术揭秘》
常量被编译进可执行文件中,进程启动后,加载进内存。
2、定义方式
a、#define
b、const
#define修饰的符号名称是一个真量数值,而const修饰的栈常量,是一个“假”常量。在实际中,使用const定义的栈变量,最终还是一个变量,只是在编译期间对语法进行了检查,发现代码有对const修饰的变量存在直接修改行为则报错。
——《C++反汇编与逆向分析技术揭秘》
const 修饰的变量,根据实测,要区分是局部变量还是全局变量。如下图所示全局变量g_val,虽然我们通过指针转换,绕过了编译器检查,但实际在写入操作时,引发异常。
而,如果是局部的const变量,则可以看出,我们对a值修改,已经成功。