const变量真的不能修改吗?

文章目录

  • 1 在Linux系统下
    • 1.1 系统参数
    • 1.2 通过指针修改(编译器有警告)
  • 2 在Windows下
    • 2.1 系统参数
    • 2.2 直接修改
    • 2.3 指针间接修改
    • 2.4 指针间间接修改
  • 3 总结:

1 在Linux系统下

1.1 系统参数

内核:Linux version 3.2.0-24-generic

操作系统: Ubuntu/Linaro 4.6.3-1ubuntu5

编译器:gcc 4.4.7

其他:编译未开任何优化

1.2 通过指针修改(编译器有警告)

#include <stdio.h>int main ()
{const int a = 1;int *b = &a;*b = 2;printf("a == %d\n", a); return 0;
}

以上代码可以通过指针来修改const int 定义的变量 a, 但是编译器会出现警告。

在这里插入图片描述

2 在Windows下

2.1 系统参数

编译器: 小熊猫C++

gcc版本: MinGW-w64 GCC 11.2.0 64-bit

2.2 直接修改

#include <stdio.h>int main()
{const int var = 1;var = 2;return 0;
}

测试结果

在这里插入图片描述

2.3 指针间接修改

#include <stdio.h>int main()
{const int var = 1;printf("初始var的值%d\n", var);int *var1 = &var;*var1 = 10;printf("修改后的var的值:%d\n", var);printf("修改后的var1的值:%d\n", *var1);printf("var的地址  %p\n", var);printf("var1的地址 %p\n", var1);return 0;
}

测试结果
在这里插入图片描述

2.4 指针间间接修改

#include <stdio.h>int main()
{const int var = 1;const int *var1 = &var;int *var2 = (int *)var1;printf("var的地址  %p\n", var);printf("var1的地址 %p\n", var1);printf("初始var的值%d\n", var);printf("初始var1的值%d\n", *var1);*var2 = 10;printf("修改后的var的值:%d\n", var);printf("修改后的var1的值:%d\n", *var1);printf("修改后的var2的值:%d\n", *var2);printf("var的地址  %p\n", var);printf("var1的地址 %p\n", var1);printf("var2的地址 %p\n", var2);return 0;
}

测试结果:
在这里插入图片描述

3 总结:

在Linux下,我们虽然可以通过指针去修改只读变量,但是编译器会报出警告;在Windows下,使用同样的const int * var1 指针,指向const int var变量地址。打印出来的数值虽然一样,但是其不是指向同一块地址。 目前我还没有找到一个方法去修改只读变量。如果后面发现了更好的方法,我也会对这里进行补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309126.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件工程】漫谈增量过程模型:软件开发的逐步之道

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 增量过程模型&#xff08;Incremental Process Model&#xff09; 主要特点和阶段&#xff1a; 优点&#xff1…

模板 BIEE(二):Web日志从分析出发,在web页查看取数的sql方法

1 说明 1.1 环境 BIEE: Oracle Business Intelligence Enterprise Edition(Oracle商业智能企业版) 版本: OBIEE 12c Server 版本: 基于Oracle Analytics Server 6.4.0 版本 模板: 制造→生产成本→按前 10 个 GL 帐户列出的生产成本 1.2 背景 由《模板 BIEE (一):…

Python:爬虫获取微信公众号里面的表格内容+整理数据导出表格

前言 需求&#xff1a;统计深圳市各大剧场的钢琴表演节目的信息数据 有位朋友&#xff0c;他兼职了某个研究院&#xff1b;给他了一个任务就是统计深圳市内各大剧场的钢琴表演节目信息的数据。这件事情让他头疼&#xff0c;哈哈哈哈 跟我说了以后&#xff0c;我立刻想到用pyt…

MYSQL数据库安全性练习题

Mysql数据库实验及练习题相关 MySQL 数据库和表的管理-数据库实验一 MySQL连接查询、索引、视图-数据库实验二、实验三 MySQL约束、触发器-数据库实验四 MYSQL存储过程和存储函数-数据库实验五 MySQL批量随机生成name、TEL、idNumber MYSQL数据库的安全管理-数据库实验六 MYSQ…

JavaEE - 网络编程之回显服务器

目录 一.什么是回显服务器&#xff1f; 二.UDP是什么&#xff1f; 1.TCP 是有链接的&#xff0c; UDP 是无连接的 2.TCP是可靠传输的,UDP是不可靠传输的 3.TCP是面向字节流的&#xff0c;UDP是面向数据报 4.TCP和UDP是全双工的 三.UDP的 socket api 四. 具体代码实现 …

JavaScript:正则表达式

JavaScript&#xff1a;正则表达式 什么是正则表达式正则表达式语法定义正则表达式判断是否有匹配的字符串查找匹配的字符串 正则表达式匹配法则元字符边界符量词字符类 什么是正则表达式 正则表达式用于匹配字符串中字符的组合模式。 正则表达式会依据其自身语法&#xff0c;…

山西电力市场日前价格预测【2023-12-28】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-28&#xff09;山西电力市场全天平均日前电价为814.30元/MWh。其中&#xff0c;最高日前电价为1500.00元/MWh&#xff0c;预计出现在08:00~08:45,17:00~20:15。最低日前电价为394.61元/…

C语言中灵活多变的动态内存管理,malloc函数 free函数 calloc函数 realloc函数

文章目录 &#x1f680;前言&#x1f680;管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 &#x1f680;在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一…

实现区域地图散点图效果,vue+echart地图+散点图

1.效果图 2.准备工作,在main.js和index.js文件中添加以下内容 main.js app.use(BaiduMap, {// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ak: sRDDfAKpCSG5iF1rvwph4Q95M6tDCApL,// v:3.0, // 默认使用3.0// type: WebGL // ||API…

python+django大自然环境保护宣传网站62r9b

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 本系统由后台管理子系统&#xff0c;登录子系统&#xff0c;按登陆角色及权限划分为管理员:个人中心&#xff0c;用户管理&#xff0c;文…

Python三级 每周练习题32

如果你感觉有收获&#xff0c;欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 练习一: 作业1 (1)用 python 新建一个文件名为jscj.csv 文件&#xff0c;将上述的数据写入表格 (2)计算输出每个班的平均分(结果保留两位小数) 答案: with open(cjm.csv,w,encodingu…

英语打卡分析12

[爱心]长难句分享第十二天解析 [玫瑰]【词汇】&#xff1a; • appropriate [əˈproʊpriət] adj. 恰当的 • in place 准备妥当 • caregiver [ˈkerɡɪvər] n. 看护人 • no more … than… 和……一样不 • newsworthy [ˈnuːzwɜːri] adj. 值得报道的 • capable […