float a = 1.0f;
cout << (int)a << endl; //将a强制转换为整型
cout << &a << endl; //取a的地址十六进制
cout << (int)&a << endl; //把a的地址强制转换成十进制的整型
cout << (int&)a << endl; //将a的引用强制转化为整型
输出结果:
(int&)a相当于将该浮点数地址开始的sizeof(int)个字节当成int型的数据输出,因此这取决于float型数据在内存中的存储方式,而不是经过(int&)a显示转换的结果(1)。
因为float a = 1.0f在内存中的表示都是3f800000,而浮点数和一般整型不一样,所以当(int&a)强制转换时,会把内存值3f800000当作int型输出,所以结果自然变为了1065353216(0x3f800000的十进制表示)。