關鍵要求: 形參與實參的類型、個數、順序必須一一對應。C 語言不進行執行時類型檢查或範圍檢測,程式設計師必須自行確保正確性。
| 傳遞方式 | 機制 | 對實參的影響 | C 語言預設 |
|---|---|---|---|
| 值傳遞 | 將實參的值複製給形參 | 形參變化不影響實參 | 是(除少數情況) |
| 參考傳遞 | 將實參的位址複製給形參 | 形參變化影響實參 | 需手動實作(傳指標) |
void sqr(int x) {
x = x * x; // 僅修改區域副本
}
void main() {
int t = 10;
sqr(t);
printf("%d %d", t, t); // 輸出:10 10
}
執行結果:100 10(若函數內印出 x)。實參 t 的值保持不變,因為傳遞的是副本。
雖然 C 預設值傳遞,但可透過傳遞指標模擬參考傳遞:
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void main() {
int x = 5, y = 10;
swap(&x, &y); // 傳遞位址
// x=10, y=5
}
這是 C 語言中實現「輸出參數」或修改實參的標準做法。
傳給函數的只是參數值的副本。函數內部的所有變化均無法影響調用時使用的原始變數——除非你傳遞的是它們的位址。