关于const修饰的常量的修改问题

C语言 码拜 9年前 (2015-11-27) 1108次浏览
关于const修饰的常量的修改问题
关于const修饰的常量的修改问题
这两张图就是本人的疑惑
本人在CSDN学院上看到有个指针专题 说GCC环境下可以用指针去修改const常量的值
本人试了一下发现不可以 然后本人就强制类型转换之后再试
GCC没有报错 但是问题是a的值依旧没有改变 而且*p的值却改变了
令本人感到惊讶的是它们拥有相同的地址,却有不同的值,这是怎么一回事呢?
讨教各位
解决方案:10分
C++ 和 C对const修饰的处理方法不一样。
你把文件名由“point.cpp”改成”point.c”,重新编译一下,再看看,就会有另一种结果。
解决方案:10分
编译器的确为const 声名的变量分配了一个内存空间,但是在引用了该变量的地方编译器在编译时都将该变量替换为了常数,就像宏代换那样,也就是说运算用到的实际数值是在代码区存放的常数,而并非在数据空间的那个数,所以你通过指针可以修改数据空间的值并不影响a本身的值,当然不同的编译器可能是不一样的
解决方案:20分
const 的作用是你对编译器负责,编译器告诉你,怎么样使用可能会出错。
一旦你用了const 关键字,表明你跟编译器签订了条约。
你确信,你的代码里,不会出现修改const 修饰的那个对象的值的代码。
一旦出现修改const 修饰的那个对象的值,那就是你想错了,或笔误,请编译器给你指出错误。
而不是相反,编译器不必对你写出来的const 负责;
const 是约束程序员而不是编译器的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于const修饰的常量的修改问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)