https://blog.csdn.net/qq_43152052/article/details/99306967
1、const修饰的量不是常量,仅仅是个只读量。在编译的时候全部替换const变量被赋予的值(这点和C语言的宏相似),在运行的时候该const变量可通过内存进行修改:
1.1)通过内存(指针)可以修改位于栈区的const变量,语法合乎规定,编译运行不会报错,但是在编译的时候所有用到该常量的地方全部被替换成了定义时所赋予的值,然后再运行的时候无法使用通过指针修改后的值。
比如 char p[] = "123"; p[0] = 'a',合法,是因为“123”从常量区复制到了栈上
而char*p = "123" p[0] = '2',就是下面的运行时出错,因为此时“123”在全局/静态区或者常量区,这个不确定,反正是在堆栈区下面的区就不能改。