| 術語 | 全稱 | 特點 | 生命周期 |
| 形參 | 形式參數 | 函數定義中的佔位符,無實際數據 | 調用時分配,返回時釋放 |
| 實參 | 實際參數 | 調用時傳入的具體數據(常量/變量/表達式/函數調用) | 調用方管理 |
參數傳遞機制:單向值傳遞
- 實參的值複製給形參(相當於賦值)
- 形參變化不影響實參
- C 語言只有傳值調用,無傳引用(可用指針模擬)
實戰驗證:形參修改不影響實參
#include <stdio.h>
int sum(int n) {
for (int i = n - 1; i >= 1; i--) n += i; // 修改形參 n
printf("函數內 n = %d\n", n);
return n;
}
int main() {
int m = 100, total;
total = sum(m);
printf("函數外 m = %d\n", m); // m 仍為 100
printf("1+...+100 = %d\n", total);
return 0;
}
運行結果
函數內 n = 5050
函數外 m = 100
1+...+100 = 5050
形參實參匹配規則
- 數量一致
- 類型兼容(允許隱式轉換,如 int→float,但可能丟失精度)
- 順序一致
不匹配導致「類型不匹配」編譯錯誤/警告。
實參形式多樣化
int max(int a, int b); // 兩 int 形參
max(10, 20); // 常量作實參
int x=10, y=20;
max(x, y); // 變量作實參
max(x, 20); // 混合
max(x+5, y*2); // 表達式作實參
max(scanf("%d",&x), y); // 函數調用作實參(scanf 返回值)
函數返回值
return 表達式;
return (表達式);
- 遇到
return 立即結束函數,返回值傳給調用方
- 函數可有多個
return,但每次調用只執行一個
- 無
return 或 return; 無表達式 → 返回值不確定(未定義行為)
返回值類型聲明
int max(int a, int b) { ... } // 返回 int
double avg(int a, int b) { ... } // 返回 double
void printHello() { ... } // 無返回值
void 類型:明確表示無返回值
void func() 表示不返回有意義數據
- 調用時不能接收返回值:
int x = func(); // 錯誤
- 可單獨用
return; 提前退出
- 良好習慣:不需要返回值的函數必須聲明為 void
常見錯誤與最佳實踐
| 錯誤 | 正確做法 |
| 忘寫 return 導致隨機返回值 | 所有非 void 函數所有路徑必有 return |
| 用指針修改實參卻忘傳地址 | 需傳遞 &var,形參聲明為指針類型 |
| 返回局部變量/數組地址 | 返回動態分配內存、靜態變量、或結構體副本 |
| 遞歸缺少基準情況 | 必須有終止條件,防止棧溢出 |
- 上一篇文章: C語言函數聲明與函數原型:解決前向引用的關鍵機制
- 下一篇文章: C語言自定義函數完整指南:無參/有參定義、調用與 return 控制流
Copyright ©
程式碼之家 All Rights Reserved