【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;
}
相关推荐
毕设源码-朱学姐8 分钟前
【开题答辩全过程】以 基于Java的网上花店管理系统设计与实现为例,包含答辩的问题和答案
java·开发语言
量子炒饭大师8 分钟前
【一天一个计算机知识】—— 【操作数与运算符的关系】一文带你领悟 单目 双目 三目 运算符!!
c语言·c++·dubbo·单目运算符·双目运算符·三目运算符·操作数
zls3653658 分钟前
C# WPF canvas中绘制缺陷分布map
开发语言·c#·wpf
lly20240611 分钟前
并查集快速合并
开发语言
神仙别闹12 分钟前
基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏
java·开发语言·dubbo
季明洵14 分钟前
Java实现栈和最小栈
java·开发语言·数据结构·
Kiyra22 分钟前
深入浅出远程连接:Java 后端视角下的底层原理与实践
java·开发语言
xiaoye-duck25 分钟前
《算法题讲解指南:优选算法-双指针》--03快乐数,04盛水最多的容器
c++·算法
Hx_Ma1626 分钟前
测试题(五)
java·开发语言·后端
musenh26 分钟前
python基础
开发语言·windows·python