您的位置:首页 > 其它

(int&) 与int(&)

2015-08-31 09:23 260 查看
#include<iostream>
using namespace std;
int main()
{
float a = 1.0f;
cout << sizeof(int) <cout << sizeof(float) <
cout << (int)a << endl;//1
cout << &a << endl; /*取a的地址十六进制0012FF7C*/
cout << (int)&a << endl;/*(int)&a:把a的地址强制转换成十进制的整型1065353216*/
cout << (int&)a << endl;
/*实际上,(int&a)是与*((int*)&a)等价的,意思都是将&a这个地址上的32位看成int型,即使存储在这里的可能不是int型数据(int&)a为什么会是1065353216呢?
这和浮点数在内存中的存储格式有关,float 1.0在内存中存储为(按IEEE754规定):
符号位           阶(8位)                          尾数(23位)
0            01111111       000 0000000000 0000000000
于是将其看做int型数值的话
00111111100000000000000000000000(2)   =   1065353216(10)
把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216
(int&)a 相当于
*(int*)&a
*(int*)(&a)
*((int*)&a)
*/

cout << boolalpha << ((int)a == (int&)a ) << endl;//   输出false.因为1!=1065353216.
float b = 0.0f;
cout << (int)b << endl;//0
cout << &b << endl;/*取b的地址十六进制0012FF78*/
cout << (int&)b << endl;//0
cout << boolalpha << ((int)b == (int&)b ) << endl;//   输出true,因为0==0;
/*
(int&)a   不经过转换,   直接得到a在内存单元(就是地址)的值
(int)a     a在内存中的值转换成int类型 */
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: