void sub1(char a, char b) { char c; c=a; a=b; b=c; }
void sub2(char *a, char b) { char c; c=*a; *a=b; b=c; }
void sub3(char *a, char *b) { char c; c=*a; *a=*b; *b=c; }
main() {
char a='A', b='B';
sub3(&a, &b); putchar(a); putchar(b); // 交換成功:B A
a='A'; b='B'; sub2(&a, b); putchar(a); putchar(b); // 僅修改 a:B B
a='A'; b='B'; sub1(a, b); putchar(a); putchar(b); // 均不變:A B
}
輸出序列:B A B B A B → 選項 ① BABBAB。
| 調用 | 參數類型 | 能否修改實參 | 輸出 |
|---|---|---|---|
sub3(&a, &b) | 雙指針 | 能交換 *a 和 *b | B A |
sub2(&a, b) | 指針 + 值 | 能修改 *a(即 a),b 為副本無影響 | B B |
sub1(a, b) | 雙值 | 均為副本,無法修改實參 | A B |
sub2 中 b 是字符副本,修改 b 不影響主調函數的 b。