(int&) 與int(&)
阿新 • • 發佈:2019-01-10
#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型別 */ }