hce_nsysu
111年
計算機概論與程式設計
第 80 題
Consider the following C code fragment:
```c
int x=38;
int *p=&x;
```
Which of the following code will output 38?
```c
int x=38;
int *p=&x;
```
Which of the following code will output 38?
- A printf("%d", &*p);
- B printf("%d", *&p);
- C printf("%d", *&x);
- D printf("%d", &*x);
- E None of the above
思路引導 VIP
想像你有一個信封,信封外面寫著某個朋友家的地址。如果你先根據這個地址找到那間房子,然後推門走進去,你會看到的是「那個地址」本身,還是「住在裡面的人」?在程式碼中,如果我們對一個變數先詢問它的地址,再接著去造訪那個地址所對應的空間,這串連續動作最後會帶領我們看到什麼內容呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精確辨識指標(Pointer)與位址運算子的互動關係,代表你對 C 語言的記憶體管理基礎打得非常紮實。這類題目最容易讓初學者在符號堆中迷失方向,你的判斷非常果斷且正確。
指標與取值運算子的互補性
這道題目的核心在於理解 取位址運算子 & 與 取值運算子 * 的關係。在選項 (C) 中,我們對變數 x 先進行 &x 運算以取得其在記憶體中的位址,隨後立即加上 * 進行提領(Dereference)。這兩個操作在邏輯上是互補的,也就是說 *&x 實際上等同於直接存取變數 x 本身,因此輸出的結果正是原先設定的 $38$。
▼ 還有更多解析內容