鱼C论坛

 找回密码
 立即注册
查看: 1155|回复: 2

[已解决]const问题,很短,为啥通过指针仍然无法修改const定义的变量

[复制链接]
发表于 2021-10-19 20:42:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         //局部的只读变量,可以通过指针来进行修改的
  5.         //如果是const在主函数外定义的全局变量,,即即使通过指针也不能修改这个值
  6.         const int data = 100;  
  7.         printf("%d\n",data);

  8.         int* p = (int *)&data;  //(int *)强制类型转换,data的类型是const int,强制转换成int
  9.         *p = 2000;
  10.         printf("%d\n", data);
  11.         return 0;
  12. }
复制代码
最佳答案
2021-10-19 20:50:48
本帖最后由 jackz007 于 2021-10-19 20:51 编辑

        const 关键字定义的是常量,也就是立即数,常量的值在程序编译时就已经确定,不占用变量空间,不可以在运行时被赋值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-19 20:50:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-10-19 20:51 编辑

        const 关键字定义的是常量,也就是立即数,常量的值在程序编译时就已经确定,不占用变量空间,不可以在运行时被赋值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-19 21:07:36 | 显示全部楼层
这是为定义的行为,不同编译器会导致不同的结果。

  1. PS F:\Repos\ccode> gcc cod.c -o cod ; if ($?) { .\cod }
  2. 100
  3. 2000
  4. PS F:\Repos\ccode> clang cod.c -o cod.exe ; if ($?) {./cod}
  5. 100
  6. 100
  7. PS F:\Repos\ccode>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表