函數參數傳遞是 C 語言模組化的核心。本文詳細釐清形參/實參記憶體模型、值傳遞語意、返回值機制與 void 型別用法。
| 特性 | 形參 | 實參 |
|---|---|---|
| 出現位置 | 函數定義 | 呼叫點 |
| 記憶體配置 | 呼叫時配置,返回時釋放 | 呼叫者既有變數/常數/運算式 |
| 作用域 | 僅函數內部 | 呼叫者作用域 |
| 值來源 | 由實參複製而來 | 預先具備確定值 |
#includeint s(int n) { for (int i = n-1; i >= 1; i--) n += i; // 修改形參 n printf("inner n = %d\n", n); return n; } int main(void) { int n = 100; int total = s(n); printf("outer n = %d\n", n); // 仍為 100 printf("sum = %d\n", total); return 0; }
輸出:
inner n = 5050 outer n = 100 sum = 5050
形參 n 在堆疊幀中獨立,修改不影響呼叫者的 n。若需修改呼叫者變數,必須傳遞**指標**。
return 運算式; 返回(或 return (運算式);)。return,但單次呼叫僅執行一個。float → int 截斷)。int 時,定義可省略 int(舊式,現代不建議)。void print_sum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) sum += i;
printf("1+...+%d = %d\n", n, sum);
// 無 return 或 return; 僅離開
}
void 函數不可用於運算式(x = print_sum(10); 編譯錯誤)。void**,提升可讀性與型別安全。