鄭飛龍 17:17:04
這個是一道面試題,不知道這題是什麼意思?
beyond(jzk) 17:19:55
我也弄不明白...
beyond(jzk) 17:20:15
我感覺輸出應該是false true
鄭飛龍 17:20:45
答案就是這樣
鄭飛龍 17:20:49
你是怎麼看出來的
beyond(jzk) 17:22:43
float 1.0f = 0x37ff..反正是浮點數的表示..
float 0.0 =0.
beyond(jzk) 17:24:41
1.0=3f80000h
鄭飛龍 17:24:48
恩,記憶體中好像就是這樣的
beyond(jzk) 17:24:49
0.0=00000000
beyond(jzk) 17:25:22
(int)a = ftoi(a)=1.
鄭飛龍 17:25:38
恩,後面的呢
beyond(jzk) 17:25:54
(int&)a=0x3f800000
鄭飛龍 17:26:23
為什麼(int &)a
鄭飛龍 17:26:46
就是你說的那個值呢
beyond(jzk) 17:27:03
我感覺(int &)a=(int)(int*)a
鄭飛龍 17:27:19
這個意思是不是相當與把乙個浮點數當作整形給輸出了
beyond(jzk) 17:27:40
(int)a這個比較明顯=1.
鄭飛龍 17:27:49
恩,這個比較明顯
beyond(jzk) 17:28:41
(int&)a我理解的就是把a的內容也就是0x3f800000轉換成乙個位址=0x3f800000
beyond(jzk) 17:30:38
這個題應該是考的浮點數的記憶體表示吧..
鄭飛龍 17:31:10
int & r = (int &)a;
鄭飛龍 17:31:32
那麼這裡的r應該怎麼理解?
鄭飛龍 17:32:04
r 是你剛才說的那個位址是對應的
鄭飛龍 17:33:00
cout..我看暈了..
鄭飛龍 17:36:21
但是我輸出r,r的值還是0x3f800000
beyond(jzk) 17:36:23
哪個公司的面試題
鄭飛龍 17:36:44
emc鄭飛龍 17:36:51
易安信beyond(jzk) 17:37:30
如果輸出是0x3f800000的話,那應該得有乙個中間變數..
beyond(jzk) 17:37:53
你除錯看一下..
鄭飛龍 17:38:12
你說的中間變數,指的是什麼 ?
beyond(jzk) 17:39:10
(int&)a,不然r引用的位址在**..
beyond(jzk) 17:40:41
你看看(int&)a 是不是等於(int)(int*)a
鄭飛龍 17:40:50
我除錯的時候看,vc好像給r開了乙個空間,那個空間存的內容就是a變數的位址。
beyond(jzk) 17:41:34
那樣的話,r就是乙個指標了..
鄭飛龍 17:42:07
我估計底層都是這樣實現的
beyond(jzk) 17:42:20
可能吧..
beyond(jzk) 17:43:08
再遇到這種題,可以現根據自己的理解解答..
鄭飛龍 17:44:32
除錯的時候,&r和a的位址一樣,真讓人費解
鄭飛龍 17:44:42
編譯器把我都搞暈了
beyond(jzk) 17:45:37
...鄭飛龍 17:46:09
除錯是這樣,我暈的不行,實在是理解不了
鄭飛龍 17:48:32
算了,太細了,也沒什麼意思
beyond(jzk) 17:48:37
這樣理解你看行不行,反正引用肯定對應乙個變數..
鄭飛龍 17:48:48
恩beyond(jzk) 17:49:15
對於int& r=(int&)a.這個句子裡面只有乙個變數a
鄭飛龍 17:49:23
恩beyond(jzk) 17:49:52
所以r應該是a的位址別名..
鄭飛龍 17:50:01
恩beyond(jzk) 17:50:08
a的位址裡放的是0 3f800000
beyond(jzk) 17:50:19
0x3f800000
鄭飛龍 17:50:56
恩beyond(jzk) 17:51:29
不管a是什麼型別,他位址裡的16進製制內容是一樣的..
鄭飛龍 17:51:42
恩beyond(jzk) 17:52:42
只是因為引用的型別是int型的,所以輸出的是3f800000的int型值..
beyond(jzk) 17:54:00
float& m=(float&)a;
beyond(jzk) 17:55:37
(float&)a==a
鄭飛龍 17:56:01
恩,我明白了一點
beyond(jzk) 17:56:41
(int&)a==*(int*)&a
(int&)a 是取位址,位址型別轉換,取內容的簡寫形式.相當於*(int*)&a;
不管a是什麼型別 (int&)a==*(int*)&a這個等式都成立
float a=1.0f;
int& r=(int&)a;這一句是後,r是乙個指向a位址的int型引用,輸出r相當於輸出a位址的整形內容
對於這個例子
cout<
關於C 中函式返回引用的討論
從函式返回引用 確保其引用的物件在函式執行完後仍然存在。引用型別返回值的主要特徵是可以作為左值,這意味著我們可以在賦值語句的左邊使用返回引用的函式的結果。永遠不要從函式中返回區域性變數的引用 c 中,返回引用是乙個比較晦澀的概念。在書中,對此僅僅做了乙個一般的介紹,並沒有展開。我覺得有必要對此進行一...
關於C 中函式返回引用的討論
從函式 返回引用 確保其引用的物件在函式執行完後仍然存在。引用型別返回值的主要特徵是可以作為左值,這意味著我們可以在賦值語句的左邊使用返回引用的函式的結果。永遠不要從函式中返回區域性變數的引用.1 首先,返回引用,要求在函式的引數中,包含有以 引用方式或 指標方式存在的,需要被返回的引數。比如 in...
關於C 中函式返回引用的討論
從函式返回引用 確保其引用的物件在函式執行完後仍然存在。引用型別返回值的主要特徵是可以作為左值,這意味著我們可以在賦值語句的左邊使用返回引用的函式的結果。永遠不要從函式中返回區域性變數的引用 c 中,返回引用是乙個比較晦澀的概念。在書中,對此僅僅做了乙個一般的介紹,並沒有展開。我覺得有必要對此進行一...