普考-資訊處理計算機概要104 年第 23 題單選題
有一陣列名字 CSName,當把此陣列當作參數,傳遞給一函數時,在C 語言中,會以下列那一種方式自動傳遞?
A*CSName
BCSName[0]
CCSName[1]
D&CSName[0]正確答案
D正確答案
C 語言傳陣列給函數時,會自動傳遞「第一個元素的位址」,即 &CSName[0]。
為什麼答案是 D
C 語言中陣列名會自動退化 (decay) 為指向第一個元素的指標,即 &CSName[0],函數接收到的是此位址。
載入中…
完整詳解
Pro · 無限重點 C 語言傳陣列給函數時,會自動傳遞「第一個元素的位址」,即 &CSName[0]。
陣列名 = 第一個元素的位址 = &array[0],三者等價。
逐選項分析
A✕ 陷阱
*CSName 是對陣列名解參考,取得的是第一個元素的「值」(CSName[0]),而非位址,方向錯誤。
B✕
CSName[0] 是陣列第一個元素的「值」,不是位址,不是 C 語言自動傳遞的內容。
C✕
CSName[1] 是第二個元素的值,與陣列傳參毫無關係,明顯錯誤。
D✓ 正確
C 語言中陣列名會自動退化 (decay) 為指向第一個元素的指標,即 &CSName[0],函數接收到的是此位址。
C 語言陣列傳參三等價式
| 寫法 | 意義 | 型別 | 是否等價 |
|---|
| CSName | 陣列名 | 指標 (退化) | ✓ |
| &CSName[0] | 第一個元素位址 | 指標 | ✓ |
| *CSName | 第一個元素值 | 元素型別 | ✗ (是值) |
| CSName[0] | 第一個元素值 | 元素型別 | ✗ (是值) |
易誤選 A (*CSName),以為「指標相關」就是答案。但 * 是解參考運算子,取得的是「值」;& 才是取位址運算子。陣列傳參傳的是「位址」,所以是 &CSName[0] 而非 *CSName。