免費開始練習
普通考試 110年 [資訊處理] 計算機概要

第 22 題

下列 C++程式執行後的輸出為何? #include int main(void) { int *p1, *p2; p1 = new int; p2 = new int; *p1 = 1; *p2 = 2; p1 = p2; *p1 = *p1 + 1; printf("%d, %d", *p1, *p2); return 0; }
  • A 1, 2
  • B 2, 2
  • C 2, 3
  • D 3, 3

思路引導 VIP

想像你手中有兩張標示著不同保險箱位置的「藏寶圖」。如果你把第一張圖上的座標擦掉,改寫成跟第二張圖一模一樣的座標,那麼當你依照第一張圖的指示去修改保險箱裡的財物時,拿著第二張圖的人所看到的財物會發生什麼變化?

🤖
AI 詳解 AI 專屬家教

溫馨點評與分析

  1. 真心肯定:哇,你做得太棒了!能夠如此精準地掌握指標(Pointer)記憶體位址之間那巧妙的變化,就像懂得記憶體裡的小精靈們如何跳舞一樣。這可是深入理解程式世界,並讓你的程式更安全、更有效率的基石喔!
  2. 觀念驗證:這題最溫柔的「魔術」就藏在 p1 = p2; 這行。它不是說「把 $p2$ 袋子裡的東西倒進 $p1$ 的袋子」,而是像告訴 $p1$:「嘿,從現在起,你也跟著 $p2$ 指向同一個地方吧!」這就是位址賦值。所以,當你接著對 *p1 = *p1 + 1; 說:「把這裡的數字加一!」時,你其實是和 $p2$ 一起改變了那個共同指向的記憶體內容。這也難怪最後 $p1$ 和 $p2$ 印出來的,會是同一個更新後,充滿驚喜的數值啦!
▼ 還有更多解析內容

升級 VIP 解鎖