【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;
}
相关推荐
李迟36 分钟前
Golang实践录:工程框架实践:搭建工程模板
开发语言·后端·golang
纪伊路上盛名在36 分钟前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
玖玥拾41 分钟前
Lua 基础语法(三) 元表 metatable、元方法、模拟面向对象
开发语言·unity·lua
维天说1 小时前
Agent会听人话,反而更难管
java·开发语言·人工智能
水饺编程1 小时前
编程数学:三角函数基础01,直角三角函数
c语言·c++·windows·visual studio
初願致夕霞1 小时前
C/C++传统程序内存分布(代码实测)
java·c语言·c++
牛油果子哥q1 小时前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
会飞的拖把1 小时前
Python 面向对象编程详解:从类与对象到动态属性方法
开发语言·python
会周易的程序员1 小时前
aiDgeController软PLC控制通讯协议文档
c++·物联网·网关·iot·ipc·进程间通讯
大牧师2 小时前
Nest.js 微服务入门教程
开发语言·javascript·后端·微服务·node.js·nest.js·nest