公務人員特種考試計算機大意106 年第 27 題單選題
下列 C 程式執行完後,變數 n 的值為何?
int main(void)
{
int m, n;
int *p;
m = 10;
p = &m;
n = (*p)+m;
printf("n=%d\n", n);
}
C正確答案
p 指向 m,*p 取得 m 的值 10,故 n = 10 + 10 = 20。
為什麼答案是 C
p = &m 使 p 指向 m,*p 解參考得到 10,再加上 m 的 10,n = 20。
載入中…
完整詳解
Pro · 無限重點 p 指向 m,*p 取得 m 的值 10,故 n = 10 + 10 = 20。
看到 *p 就問:p 指向誰?答案就是那個變數的值。本題 p 指向 m,*p 即 m。
逐選項分析
A✕ 陷阱
10 是 m 的值,不是 n。誤以為 n 只被賦值 *p 一次,忽略還要加 m。
C✓ 正確
p = &m 使 p 指向 m,*p 解參考得到 10,再加上 m 的 10,n = 20。
D✕ 陷阱
30 是誤以為 *p + m 會變成三倍 m,對指標運算理解錯誤。
C 指標三步驟追蹤
| 步驟 | 動作 | 意義 | 結果 |
|---|
| 1 | m = 10 | m 儲存整數 10 | m=10 |
| 2 | p = &m | p 存 m 的位址 | p 指向 m |
| 3 | *p | 解參考取 m 的值 | *p = 10 |
| 4 | n = (*p)+m | 10 + 10 | n = 20 |
C 語言中 * 有兩個意思:宣告時 int *p 代表「這是指標」;使用時 *p 代表「解參考取值」。本題 (*p) 是取值,不是乘法也不是位址,等同於 m 的值 10。