改变const修饰的常量值?(最近分数比较紧张,所以只能给10分,还望大家理解,谢谢!)

aten_xie 2007-11-28 03:27:10
最近在网上看到这样一段解释:
const修饰的值可以通过下面的方法来更改:
const int i=0;
int *p = (int*)&i;
P = 100;
通过强制类型转换,将地址赋给变量,在作修改即可以改变const常量值。

我测试了一下,在TC上是可以编译通过(有警告),输出结果 i 的值并没有改变,改变的只是指针P的值。

但是这段代码在VC上是编译不通过的。即使更改也就是更改指针p的值。

问:const修饰的常量值可以改变吗?怎样改变?
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
libing8384 2007-11-28
  • 打赏
  • 举报
回复
加volatile
有些编译器会对程序进行优化,将const变量的值放在寄存器内以提高读取速度。通过指针确实修改了存储在内存中某位置的值,但使用这个变量的时候还是会从寄存器中取值。
用volatile声明变量,提示编译器不要随便对这个变量优化,就可以通过non-const指针改变变量的值了。
aten_xie 2007-11-28
  • 打赏
  • 举报
回复
没想到这么快就得到想要的答案,谢谢各位。
分少别介意!
wh_peng 2007-11-28
  • 打赏
  • 举报
回复
p = 100;编译出错,

改成 *p = 100;编译通过,执行时出错,说到底还是不能改
hnhblyc 2007-11-28
  • 打赏
  • 举报
回复
我看应该将P=100,改为*P=100,就可以了.
ckt 2007-11-28
  • 打赏
  • 举报
回复
搜索下 “常量折叠“
Treazy 2007-11-28
  • 打赏
  • 举报
回复
http://forworld.spaces.live.com/blog/cns!4F10F9A95DFA7B38!225.entry

给你帖个汇编分析,自己体会一下!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧