C++_类型转换第一部分

C++_类型转换

  • 介绍(参考文章:[显示类型转换](https://blog.csdn.net/weixin_45357007/article/details/120320523))
  • (1)去常属性:`const_cast<目标类型>(原类型变量名)`
    • C++ 指针去常属性方法 代码段:
    • C 指针去常属性方法 代码段:
    • 代码测试
    • 关键词 volatile
      • volatile 代码测试
  • (2)重解释类型转换:`reinterpret_cast<目标类型>(原类型变量名)`
    • c++ 形式 重解释类型转换 代码段
    • c 语言形式 类型转换 代码段

介绍(参考文章:显示类型转换)

本文主要介绍 C++ 中的两种类型转换形式 及 一个关键词
1.const_cast 去常属性
2.reinterpret_cast 重解释类型转换
3 volatile 关键词

(1)去常属性:const_cast<目标类型>(原类型变量名)

1.去掉指针 或 引用的常属性
2.目标类型 要与 原类型变量名的类型相同

C++ 指针去常属性方法 代码段:

#include
using namespace std;
void main()
{
    const int*pnum = &num;               //常指针
	//C++ 指针去常属性方法
	int *pnum3 = const_cast<int*>(pnum);//C++语言形式类型转换
	cout << *pnum3 << endl;             //输出结果
	system("pause");
}

C++ 指针去常属性方法 运行结果

10
请按任意键继续. . .

C 指针去常属性方法 代码段:

#include
using namespace std;
void main()
{
    const int*pnum = &num;    //常指针
    //C 指针去常属性方法
	int *pnum2 = (int*)pnum;  //C语言形式类型转换
	cout << *pnum2 << endl;   //输出结果
	system("pause");
}

C 指针去常属性方法 运行结果

10
请按任意键继续. . .

代码测试

#include
using namespace std;
void main()
{
	const int rmb = 100;//常变量 处于寄存器中(PS:用指针修改后不会改变寄存器中值)
	int const*p = &rmb;

	int*q = const_cast<int*>(p);  //去掉指针常属性
	*q = 200;                     //修改地址内的值
	//打印结果
	cout <<"结果为:"<< rmb << " " << *p << " " << *q << endl;//rmb 读取的值是从寄存器中读取的,不是从内存中读取的
	//打印地址
	cout <<"地址为:"<< &rmb << " " << p << " " << q << endl;

	system("pause");
}

代码测试 运行结果

结果为:100 200 200
地址为:007AFE74 007AFE74 007AFE74
请按任意键继续. . .

关键词 volatile

1.volatile 提醒编译器它后面所定义的 变量 随时都有可能 改变 ,因此编译后的程序每次需要存储或读取这个变量的时候,都会 直接从变量地址中读取数据

volatile 代码测试

#include
using namespace std;
void main()
{
	volatile const int rmb = 100;//常变量 
	volatile int const*p = &rmb;
	int*q = const_cast<int*>(p);  //去掉指针常属性
	*q = 200;                     //修改地址内存中的值
	//打印结果
	cout <<"结果为:"<< rmb << " " << *p << " " << *q << endl;
	//打印地址
	cout << "地址为:" << (int*)&rmb << " " << (int*)&p << " " << (int*)&q << endl;

	system("pause");
}

代码测试 运行结果

结果为:200 200 200
地址为:0116FE94 0116FE88 0116FE7C
请按任意键继续. . .

(2)重解释类型转换:reinterpret_cast<目标类型>(原类型变量名)

1.改指针 或者 引用的类型
2.将指针 或者 引用的类型转换成整形
3.把整形转换成指针 或者 引用

c++ 形式 重解释类型转换 代码段

#include
using namespace std;
void main()
{
	//c++ 形式 重解释类型转换
	int d = 0x12345678;//十六进制数
	char*tt = reinterpret_cast<char*>(&d);//将int转换为char*类型
	for (int i = 0; i < 4;++i)
	{
		//showbase在字节开头加上进制符号(俗称 格式控制符)
		//hex告诉showbase在字节开头加上十六进制符号 0x
		//dec告诉showbase在字节开头加上十进制符号 0
		//oct告诉showbase在字节开头加上八进制符号
		//(int)tt[i]是把char*类型转换成整型输出
		cout << showbase << hex << (int)tt[i] << "\t";//将每个字节以十六进制形式输出
	}
	cout << endl;
	system("pause");
}

c++ 形式 重解释类型转换 运行结果

0x78    0x56    0x34    0x12
请按任意键继续. . .

c 语言形式 类型转换 代码段

#include
using namespace std;
void main()
{
	//c++ 形式 重解释类型转换
	int d = 0x12345678;//十六进制数
	char*t= (char*)&d;//将int转换为char*类型
	for (int i = 0; i < 4; ++i)
	{
	    //将每个字节以十六进制形式输出
		cout << showbase << hex << (int)t[i] << "\t";
	}
	cout << endl;
	system("pause");
}

c 语言形式 类型转换 运行结果

0x78    0x56    0x34    0x12
请按任意键继续. . .

你可能感兴趣的:(C++学习参考,c++,学习,笔记)