首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言參數傳遞機制題目解析:值傳遞、指針傳遞與雙重指針的輸出差異

     編輯:程式設計綜合問答

題目代碼

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 和 *bB A
sub2(&a, b)指針 + 值能修改 *a(即 a),b 為副本無影響B B
sub1(a, b)雙值均為副本,無法修改實參A B

核心知識點

  • C 語言只有值傳遞,傳指針本質是傳遞地址值,通過解引用修改原內存。
  • sub2 中 b 是字符副本,修改 b 不影響主調函數的 b。
  • 代碼排版規範對閱讀理解至關重要。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved