不兼容的指针类型转换_不兼容的指针类型转换器

不兼容的指针类型转换_不兼容的指针类型转换器C++指针类型间强制转换1 void test02(){ 2 3 //- 4 //float指针相关的强制转换 5 //不同类型的指针变量,在内存中本质上都是一样

C++指针类型间强制转换
  1 void test02(){
2
3 //—————————–
4 //float指针相关的强制转换
5 //不同类型的指针变量,在内存中本质上都是一样的,都是一个整数值的地址值,一般表现为8位十六进制数
6 //不同的类型表示地址指向值的解释类型,及该变量在内存中占据字节的数目
7 //地址值可以强转为其他类型,但将地址指向值解释为其他类型容易出错,如float解释为int
8 //常量直接赋值给指针是不可以的,必须强转为合法地址,另外由于内存地址是整型值,因此浮点型数据不能成为合法地址
9 //—————————–
10 float a = 10.1;
11 float *p_ = &a;
12
13 cout << typeid(p_).name() << endl; //float*
14 cout << p_ << endl; //地址,8位十六进制数字(32位二进制数字)
15 cout << *p_ << endl; //地址指向的数据,同样为32位二进制数字,按照float进行解释,得到10.1
16
17 //cout << (float)p_ << endl; //不允许将地址直接转化为浮点型,但可以间接修改
18 cout << (char)p_ << endl; //直接将地址转化为字符型
19 cout << (int)p_ << endl; //直接将地址转化为十进制整型
20
21 cout << (int*)p_ << endl; //将地址float *类型转换为int*,后面的解释会发生变化,但地址的十六进制数字不会发生变化
22 cout << *(int*)p_ << endl; //地址指向的数据,会按照int型进行解释,得到1092721050
23 cout << (int&)(*p_) << endl; //同样的将数据解释为int型,得到1092721050, 则是告诉编译器将数据看成int对待
24
25 cout << *(int*)&p_ << endl; //将地址(8位十六进制数字)转换为十进制,先取p_的地址,然后按照int进行解释
26 cout << *(float*)&p_ << endl; //将地址(8位十六进制数字)转换为float,先取p_的地址,然后按照float进行解释
27 cout << *(float*)p_ << endl; //输出10.1
28
29 cout << (char*)p_ << endl; //将地址float*类型转换为char*类型,其实地址的十六进制数字不会发生变化,但<<会直接输出指向的字符串
30 cout << static_cast<const void *>(p_) << endl; //可以这样输出转换为char*后的地址
31 cout << *(char*)&p_ << endl; //将地址(8位十六进制数字)转换为char,先取p_的地址,然后按照char进行解释
32 cout << *(char*)p_ << endl; //将数值型数据按照字符类型,这里无法将float解释为char型,但是int型默认可以转换为ASCII码,解释为char型
33 }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/92727.html

(0)
上一篇 2024年 5月 29日
下一篇 2024年 5月 29日

相关推荐

关注微信