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

C 語言字符指針傳參陷阱:形參修改為何影響實參?

     編輯:程式設計綜合問答

經典面試題:函數 Initialize(char *a, char *b) 內部執行 b = a; b[8] = 'B';,為何主函數的兩個數組 a、b 內容同變?

內存模型圖解

調用前:main:a → [a數組內存]   main:b → [b數組內存]
調用後:形參a → [a數組內存]   形參b → [b數組內存]
b = a 後:形參a → [a數組內存]   形參b → [a數組內存]  (兩指針指向同一塊區域)
b[8]='B':修改的是 [a數組內存] 第9個字符
返回時:main:a 內容已變  main:b 內容未變 (仍指向原b數組)

關鍵結論

  1. 指針傳值:函數參數接收的是地址副本,修改形參指針指向 (b = a) 不影響實參指針。
  2. 指向內容共享:形參 a 與實參 a 指向同一塊內存,修改內容 (a[i] = ...) 實參可見。
  3. 二級指針才能改指向:若需在函數內修改實參指針指向,參數應為 char **。

最佳實踐

  • 避免形參與全局變量同名,易混淆。
  • 需修改指針指向時,傳遞指針的指針或返回新指針。
  • 使用 strcpy 複製字符串內容,而非賦值指針。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved