【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;
}
相关推荐
wjs20242 分钟前
CSS 颜色
开发语言
无巧不成书02183 分钟前
Java数值字面量速查表
java·开发语言·python·开发者·字面量
小鸡吃米…4 分钟前
测试线程应用程序
开发语言·python
python开发笔记4 分钟前
python(79) 底层代码追踪工具
开发语言·python
kgduu5 分钟前
js之错误处理
开发语言·前端·javascript
Bert.Cai5 分钟前
Python函数的定义与调用
开发语言·python
美式请加冰7 分钟前
模拟的介绍和使用
java·开发语言·算法
无限进步_8 分钟前
深入解析vector:一个完整的C++动态数组实现
c语言·开发语言·c++·windows·git·github·visual studio
tankeven13 分钟前
HJ129 小红的双生数
c++·算法
万能的小裴同学13 分钟前
C++ 简易的FBX查看工具
开发语言·c++·算法