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