const常量可以被修改吗?解决思路
const常量可以被修改吗?下面代码,请C大侠指点!在turboc和vs2010中各输出什么,为什么?特别是在vs2010调试中
const常量可以被修改吗?
下面代码,请C大侠指点!
在turboc和vs2010中各输出什么,为什么?
特别是在vs2010调试中看到的让我都不敢相信自己的眼睛.....求救......
#include <stdio.h>
int main(void)
{
const int a = 3;
int *p = (int *)(&a);
*p = 1;
printf("%d %d\n", *p, a);
return 0;
}
[解决办法]
[解决办法]不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
[解决办法]//某位仁兄的回答。
const只是辅助你做一些语法检查,不是来防备这些恶意修改的。使用C风格的类型转换谁都无法防止。除非你的const数据被放在只读内存区(这将是非常代价高昂的),否则这种恶意修改总会得逞,然后在使用这种const的其他地方导致你自己意想不到的问题。
我得说:编译器总是假定程序员不会作茧自缚去做恶意修改
//参考链接
http://topic.csdn.net/u/20110316/15/1800a80e-4cac-4215-8e0a-833c586492c3.html
http://blog.csdn.net/bluesky12312388/article/details/6007095
-------------
这个和编译器有比较大的关系吧,一般自己不会去做这样的事情,既然想把他变成const常量,就表示你不想修改它,不然你何必写成const。
VC6.0表示 .c文件编译运行之后1,1。
VC6.0同样表示.cpp 文件运行之后1,3。
[解决办法]还是按照规范做事为好
[解决办法]不就是改个CONST常量么~ 你数据放在内存里的 内存每次重启电脑都要被重新写过的 也就是说只要是内存中的数据没有不能被修改的
请记住 只有硬件上的只读 没有软件上的只读