原住民族考試四等考試-電子工程類科計算機概要114 年第 23 題單選題
考慮下列 C 語言的函數(Function)原型(Prototype)的宣告 int foo(int **a, float b[ ], int c);。此副程式 foo 的參數傳遞方法,依序分別為:
A傳值、傳址、傳值
B傳址、傳值、傳值
C傳址、傳址、傳值正確答案
D傳值、傳址、傳址
C正確答案
C 語言中指標(**)和陣列([])都是傳址,一般變數(int)是傳值。
為什麼答案是 C
正解。int **a 指標(傳址)、float b[] 陣列退化為指標(傳址)、int c 一般變數(傳值)。
載入中…
完整詳解
Pro · 無限重點 C 語言中指標(**)和陣列([])都是傳址,一般變數(int)是傳值。
看型態:有 * 或 [ ] → 傳址;純變數 → 傳值。
逐選項分析
A✕
錯。int **a 是指標的指標屬傳址,不是傳值,第一個就錯了。
B✕ 陷阱
陷阱!float b[] 雖寫成陣列,但 C 語言中陣列參數實際以指標傳遞,屬傳址而非傳值。
C✓ 正確
正解。int **a 指標(傳址)、float b[] 陣列退化為指標(傳址)、int c 一般變數(傳值)。
D✕
錯。int **a 應為傳址而非傳值;int c 是一般整數,屬傳值而非傳址,兩處都錯。
C 語言參數傳遞判別法
| 參數宣告 | 型態 | 傳遞方式 | 本題對應 |
|---|
| int **a | 指標的指標 | 傳址 (by reference) | 第1個 |
| float b[] | 陣列 (退化為指標) | 傳址 (by reference) | 第2個 |
| int c | 一般整數變數 | 傳值 (by value) | 第3個 |
最大陷阱是 float b[ ]!很多人以為「陣列」是傳值,其實 C 語言中陣列作為函數參數時會自動退化成指標(float *),屬於傳址。這是 C 語言的經典考點。