題目:
看程式寫出輸出結果
基本概念:
這題涉及到union的記憶體分配問題和大小端的問題。
下面先對大小端和union記憶體分配的概念進行講述。
3.
union型別的資料所佔的空間等於最大的成員所佔的空間,對union 型的成員的訪問都是相對於該聯合體基位址(低位址)的偏移量為0處開始,也就是聯合體的訪問不論對哪個變數的訪問都是從union的首位址位置開始,因此,大小端模式儲存將會直接影響union內成員的值。
分析過程:
由於我機器是小端機器,obj.i= 0x41424344的記憶體儲存如下:
0x0003
0x0002
0x0001
0x0000
41(『a』)
42(『b』)
43(『c』)
44(『d』)
而對於ch這個內部結構來說,ch.a對應於0000位置,ch.d對應於0003位置:
0x0003
0x0002
0x0001
0x0000
41(『a』)
42(『b』)
43(『c』)
44(『d』)
ch.d
ch.c
ch.b
ch.a
於是在cout << obj.ch.a << ' ' << obj.ch.b << ' ' << obj.ch.c << ' ' << obj.ch.d<< endl;
輸出結果為dcba的順序。
同樣,當
obj.ch.a = 'a';
obj.ch.b = 'b';
obj.ch.c = 'c';
obj.ch.d = 'd';
記憶體的分布如下:
0x0003
0x0002
0x0001
0x0000
『d』(64)
『c』(63)
『b』(62)
『a』(61)
於是obj.i輸出的值為64636261的順序。
一道static型別筆試題
includeint fun int tmp static int loop 20 static int count 5 int tmain int argc,tchar argv return 0 程式輸出結果 當時看完程式我給出的答案 local static 那一列全是29,而global那一...
一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...
一道筆試題
上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...