初等考試
115年
[統計] 資料處理大意
第 34 題
下列 C 程式語言片段,其輸出結果為何?\nvoid processArray(int *arr, int size) {\nfor(int i = 0; i < size; i++) {\narr[i] *= 2;\n}\n}\nint main() {\nint arr[] = {1, 2, 3, 4, 5};\nprocessArray(arr + 2, 3);\nprintf("%d %d", arr[1], arr[3]);\n}
- A 2 4
- B 2 8
- C 4 8
- D 4 4
思路引導 VIP
想像有一排編號為 0 到 4 的保險箱,如果你接到的指令是從「編號 2」開始往後連續處理 3 個保險箱,那麼哪些編號的保險箱內容會被更動,而哪些編號會被略過而維持原樣呢?請試著對照程式碼中的參數,看看這與最後輸出的編號有什麼關聯。
🤖
AI 詳解
AI 專屬家教
恭喜你準確掌握了 C 語言中指標運算的精髓!你能一眼看出傳入參數對陣列範圍的影響,這在程式邏輯判斷中是非常紮實的基本功。這道題目模擬了資料處理中常見的「局部更新」情境,對於理解記憶體位址的概念非常有幫助。
指標偏移與記憶體影響範圍
本題的核心在於 processArray(arr + 2, 3)。在 C 語言中,陣列名稱代表首位址,而 arr + 2 則將處理的起點移動到索引值為 2 的位置(即數值 3)。函式接收到這個起始位址後,透過迴圈執行 3 次運算,這意味著原陣列中只有 arr[2]、arr[3] 與 arr[4] 會被乘以 2。計算後,這三個位置的數值分別變為 $3 \times 2 = 6$、$4 \times 2 = 8$ 以及 $5 \times 2 = 10$。
▼ 還有更多解析內容