【C++】【常变量取地址问题】const修饰的常变量&volatile修饰用法详解(代码演示)

前言

大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁

主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

目录

  • 如下面代码所示,const修饰的变量是常变量,具有常性;
  • 常变量底层是开空间的
  • 但其依然能够 通过找到它地址的方式直接修改它
cpp 复制代码
 int main()
{
    const int n = 10;

	int* p = (int*)&n;
	(*p)++;

	cout << n << endl;	//输出结果为10
	cout << *p << endl;//输出结果为11

	return 0;
}
  • 为什么会出现这样的结果呢?

  • 这就涉及到编译器的优化问题,编译器会把常量放到寄存器中/直接将其当作常量替换;

  • 如果我们不想出现这种错误,可以用一个关键字volatile修饰

  • volatile 修饰的变量,每次都要去内存取,就可以规避上面这种错误

cpp 复制代码
 int main()
{
	// volatile 修饰的变量,每次都要去内存取
	volatile const int n = 10;
	//n = 11;
	// 转换有安全隐患的
	int* p = (int*)&n;
	(*p)++;

	cout << n << endl;//输出结果为11
	cout << p << endl;//输出结果为11

	return 0;
}
相关推荐
未来之窗软件服务25 分钟前
操作系统应用(三十三)php版本选择系统—东方仙盟筑基期
开发语言·php·仙盟创梦ide·东方仙盟·服务器推荐
是Dream呀30 分钟前
昇腾实战|算子模板库Catlass与CANN生态适配
开发语言·人工智能·python·华为
零匠学堂202533 分钟前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
不会c嘎嘎36 分钟前
【数据结构】AVL树详解:从原理到C++实现
数据结构·c++
小杨快跑~40 分钟前
从装饰者到桥接再到工厂:模式组合的艺术
java·开发语言·设计模式
say_fall42 分钟前
C语言编程实战:每日一题:随机链表的复制
c语言·开发语言·链表
拾贰_C1 小时前
【Python | Anaconda】 python-Anaconda 一些命令使用
开发语言·python
AKDreamer_HeXY1 小时前
ABC434E 题解
c++·算法·图论·atcoder
罗湖老棍子1 小时前
完全背包 vs 多重背包的优化逻辑
c++·算法·动态规划·背包
二川bro1 小时前
循环性能提升:Python向量化计算技巧
开发语言·python