Union型別的一道筆試題

2021-09-30 16:15:34 字數 1035 閱讀 4371

題目:

看程式寫出輸出結果

基本概念:

這題涉及到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 ...