本文主要是介绍指针类型强制转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题为下:
#include<iostream.h>
void main(){
int k=1;
int *f=&k;
*(float*)(f)=1;
cout<<*f;
}//输出为啥不是1呢
这个时候,我们可以看到函数式里面有格式的转换,如果格式转换时存在除void格式外,还有两个及两个以上的格式的转换,则这时候的指针所指的variable所占的内存会产生变化,从而会使格式发生相应的变化
对于本题:
当你强行将int指针变为float指针后 去到的数据实际已经超出了int定义的内存空间范围
例如int 占据4个字节 float 占据8个字节 开始k=1 存放到了4个字节中
当你将指针转化为float后他就读出1的四个字节及其后面的额外四个字节 所以肯定不是1了,至于会是什么 应该是随机的
这篇关于指针类型强制转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!