Q68.
C 語言程式中,當執行到第18 列後,印出a、b;*ptr1 及*ptr2 之值,下列敘述何者正確?
數位電子 · 甲級 · 程式語言 · Q68
難易度分析
3 / 5
此題需要細緻追蹤指標指向及其變化,並辨別哪兩項敘述符合程式執行結果,故被評為中等難度。
正確答案 (複選):①, ④
- ① a=64,b=69:第 15 列直接將 變數 a 賦值為 64,第 16 列透過 指標間接存取 計算 `*ptr1+5 = 64+5 = 69` 賦值給 b,因此執行到第 18 列時 a=64、b=69。
- ④ *ptr1=64,*ptr2=64:第 14 列 `ptr1=&a` 與第 17 列 `ptr2=&a` 使兩個 指標變數 均指向 a,形成 指標別名(aliasing),故 `*ptr1` 與 `*ptr2` 皆等於 a 的值 64。
錯誤選項解析
- ② a=69,b=64:a 在第 15 列被明確賦值為 64,b 在第 16 列經 指標運算 得到 69,此選項將兩者數值顛倒。
- ③ *ptr1=64,*ptr2=69:第 17 列執行 `ptr2=&a` 後,ptr2 的指向已從 b 改為 a,因此 `*ptr2` 與 `*ptr1` 均間接存取同一變數 a,兩者皆為 64 而非 69。
Learning Tip
"解題關鍵在於追蹤每個 指標變數 的指向變化:`ptr = &變數` 改變指標指向,`*ptr = 值` 透過指標修改目標記憶體內容。第 17 列 `ptr2=&a` 是最易忽略的一步,它使 ptr2 從指向 b 改為指向 a,導致 `*ptr2` 的最終值與 b 不同。"
學員答題分佈
①a=64,b=690%
②a=69,b=640%
③*ptr1=64,*ptr2=690%
④*ptr1=64,*ptr2=640%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!