本帖最后由 NoDocCat 于 2017-12-10 11:13 编辑
首先, const翻译过来确实是常量的意思
但是const修饰和代码中的字面量 符号常量还是有区别的, 字面量和符号常量编译时会被编译为指令中的立即数, 而const修饰会和变量一样分配到内存中.
另外, 你真的认为const是无法改变的吗?
[C] 纯文本查看 复制代码
#include "stdafx.h"
int main(){
const int a = 1;
int *p = (int*)&a;
*p = 2;
printf("a = %d, *p = %d\n", a, *p);
system("pause");
return 0;
}
你可以试下这段代码, 输出的结果是a = 1, *p = 2
输出a = 1个人推测是因为编译器的优化, 这里被优化为立即数了
但是*p = 2可以说明const int a所在的内存空间被修改了
你也可以拿调试工具去查看一下内存, 看看const int a的变化
很明显, const修饰的只是变量名, 只是说你不能通过这个变量名去修改变量, 不是说这块内存是不变的. 如果你通过其他方式访问到了这块内存, 你依然可以修改这块内存的值 |