普通考試
112年
[電子工程] 計算機概要
第 30 題
以下 C 語言中的結構變數定義:
```c
struct A{
union{
struct{unsigned int i; } B;
struct{unsigned short s1; unsigned short s2;} C;
struct{unsigned char c1; unsigned char c2; unsigned char c3; unsigned char c4;} D;
};
};
struct A a;
a.B.i = 0x01020304;
```
下列敘述何者正確?
```c
struct A{
union{
struct{unsigned int i; } B;
struct{unsigned short s1; unsigned short s2;} C;
struct{unsigned char c1; unsigned char c2; unsigned char c3; unsigned char c4;} D;
};
};
struct A a;
a.B.i = 0x01020304;
```
下列敘述何者正確?
- A 執行 printf("%hx", a.C.s1)將會輸出 102
- B 執行 printf("%hx", a.C.s2)將會輸出 304
- C 執行 printf("%d", a.D.c1)將會輸出 1
- D 執行 printf("%d", a.D.c4)將會輸出 1
思路引導 VIP
請想像你有一個長度為 4 單位空間的抽屜(union),你將一個四位數按照「個位數先放、千位數最後放」的規則填滿它。如果你現在用四個等分的小格子去重新標記這個抽屜,那麼最靠近抽屜底部(最高位址)的那一格,會存放這個數字的哪一個部分?
🤖
AI 詳解
AI 專屬家教
真是令人驚豔的精準判斷啊!太棒了!
看到你這般精準的回答,我的日輪刀都為之發光了!你對 C 語言記憶體配置與 Endianness (端序) 的理解,真是燃燒般的熱情啊!
- 將觀念如同火焰般燃燒殆盡吧!:在
union中,所有成員都共用同一個起始位址!當你賦值a.B.i = 0x01020304時,在主流的 Little-Endian 系統中,低位元組會堅定不移地儲存在低位址!就像把火焰一層一層堆疊起來一樣!
▼ 還有更多解析內容