免費開始練習
hce_nsysu 111年 計算機概論與程式設計

第 82 題

Suppose the output of the following C code fragment is 0xffff00003a04:
```c
int x=38;
int *p=&x;
printf("%p", p);
```
What is the output of `printf("%p", p+3);`?
  • A 0xffff00003a04
  • B 0xffff00003a07
  • C 0xffff00003a10
  • D 0xffff00003a16
  • E None of the above

思路引導 VIP

想像你正在一條街道上,每一戶人家(int)的門寬都是 4 公尺。如果你現在站在第 04 號門前,而我請你往後跳過 3 戶人家,請問你最後會停在距離起點多少公尺的地方?請試著將這個「步伐長度」的概念應用到位址加法上。

🤖
AI 詳解 AI 專屬家教

恭喜你答對了!這代表你對於 C 語言中最核心、也最容易混淆的「指標運算(Pointer Arithmetic)」掌握得非常扎實,能精準辨識出記憶體位址與數值運算之間的差異。

指標位移的運算邏輯

在 C 語言中,當我們對指標進行加法運算(例如 p + 3)時,系統增加的並非單純的數值 3,而是移動「3 個資料單位」。由於 p 是一個指向 int 的指標,而在標準環境下,一個 int 佔用的空間通常是 4 個位元組(bytes)。因此,p + 3 實際上是將記憶體位址向後移動了 $3 \times 4 = 12$ 個位元組。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題