核心差異
- 值傳遞:形參是實參副本,函數內修改不影響實參。
- 地址傳遞:形參是指針,函數內通過指針修改影響實參。
演示代碼
[cpp]
#include
void fa(int a) { // 值傳遞
a++;
printf("在函數fa中:a=%d\n", a); // 2
}
void fb(int *a) { // 地址傳遞
(*a)++;
printf("在函數fb中:*a=%d\n", *a); // 2
}
int main() {
int n = 1;
printf("調用fa前:n=%d\n", n); // 1
fa(n);
printf("調用fa後:n=%d\n", n); // 1(未變)
fb(&n); // 傳地址
printf("調用fb後:n=%d\n", n); // 2(已變)
return 0;
}
輸出結果
調用fa前:n=1
在函數fa中:a=2
調用fa後:n=1
在函數fb中:*a=2
調用fb後:n=2
應用場景
- 需修改實參值 → 傳地址(指針)。
- 大結構體避免拷貝 → 傳指針(
const 保護不修改)。
- 數組名退化為指針 → 本質是地址傳遞。