身心障礙人員考試身障四等-資訊處理類科計算機概要114 年第 5 題單選題
C 語言中常有指標(pointer),有關指標下列何者錯誤?
A目標(target)可以是常數(constant)正確答案
B目標(target)可以是函式(function)
C指標的內容可以更改
D可以做為函式(function)中的參數(argument)
A正確答案
C 語言指標是存放「位址」的變數,目標可以是變數、函式,但不能是常數(常數無位址可指)。
為什麼答案是 A
錯誤敘述(即本題要選的答案)。指標指向的是記憶體位址,而「常數」本身是字面值沒有位址,故不能作為指標的 target。注意:指向 const 變數 (pointer to const) 是另一回事,那是指向「唯讀變數」,變數仍有位址。
載入中…
完整詳解
Pro · 無限重點 C 語言指標是存放「位址」的變數,目標可以是變數、函式,但不能是常數(常數無位址可指)。
常數是字面值(literal),沒有記憶體位址,指標無法指向它。函式有進入點位址,所以可指向函式。
逐選項分析
A✓ 正確
錯誤敘述(即本題要選的答案)。指標指向的是記憶體位址,而「常數」本身是字面值沒有位址,故不能作為指標的 target。注意:指向 const 變數 (pointer to const) 是另一回事,那是指向「唯讀變數」,變數仍有位址。
B✕
正確。C 語言支援函式指標 (function pointer),例如 int (*fp)(int),可指向函式的進入點位址,常用於回呼函式 (callback)。
C✕
正確。指標本身是一個變數,其內容(所存的位址)可以被重新指派,例如 p = &a; p = &b; 都合法(除非宣告為 const pointer)。
D✕
正確。指標常用於函式參數,可實現 call by reference(傳址呼叫),讓函式能修改呼叫端的變數,或傳遞陣列、大型結構以節省複製成本。
C 語言指標的合法目標
| 目標類型 | 能否被指標指向 | 原因 | 範例 |
|---|
| 一般變數 | ✅ 可以 | 變數有記憶體位址 | int *p = &a; |
| 常數字面值 | ❌ 不行 | 字面值無位址 | int *p = &5; ✗ |
| const 變數 | ✅ 可以 | 仍是變數,有位址 | const int *p = &a; |
| 函式 | ✅ 可以 | 函式有進入點位址 | int (*fp)() = func; |
| 陣列 | ✅ 可以 | 陣列名即首元素位址 | int *p = arr; |
A 選項的「常數」若理解成 const 修飾的變數會誤以為正確。關鍵在 C 語言中純粹的「字面常數」(literal constant) 無位址,不能當指標 target;但 const 變數可以。考試中「常數」通常指前者,故 A 錯誤。