类型转换 类型双关

int a=9;
double value=a;//有隐式转换(在不损失数据的情况下转换类型)
value的内存

int main()
{
	int a = 9;
	double value = *(double*) & a;//把一个int型指针转换成一个double指针然后解引用
//实际上是在外面的int之后 继续四个字节 然后value获取了这部分内存(四个字节加四个字节)这不是我们
//用来存放整数a的内存 我们已经把内存复制到一个新的double块了 是安全的写入也是在自己的内存中,但读了不属于我们的内存
//目的是让把a的地址也当成double看
}

a的地址

value的地址

不想创建变量,还想把int当double访问
double& value=*(double*) & a;
若是写value=0.0;这很危险因为实际要写8个字节,但内存中只有4个字节分配给你

struct Entity
{
  int x,y;
};//从内存角度看 可以吧这个结构体看成一个整形数组不用通过.x  .y提取数据
int main()
{
Entity e={3,4};
int position=*(int*)&e;
std::cout<<position[0]<<","<<position[1]<<std::endl;  
}
struct Entity
{
  int x,y;
int* getposition()
{return &x;}
};//从内存角度看 可以
int main()
{
Entity e={3,4};
int* position=e.getposition();
std::cout<<position[0  ]<<","<<position[1]<<std::endl;  
}

static_cast<类型>

静态类型转换
double a=5.23;
double b=(int)a+3.2//结果是8.2
double s=static_cast(a)+3.2;//也得到8.2

dynamic_cast

执行一个检查,转换不成功会返回NULL;

reinterpret_cast

把这段内存重新解释成别的东西
用cast的好处是 编译器会做检查 不行的会报错

posted @ 2024-07-15 11:40  Wzline  阅读(5)  评论(0编辑  收藏  举报