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

深入理解C語言字符指針數組與雙重指針陷阱

     編輯:程式設計綜合問答

字符指針數組核心概念

char *name[] 定義一個指針數組,每個元素指向一個字符串常量的首地址。數組名 name 在表達式中退化為指向首元素的指針(即 char **),而 name[i] 的類型是 char *,直接指向字符串。

常見錯誤分析

printf("%s\n", *name[1]); // 錯誤:解引用導致取到字符 'g' 的地址,而非字符串地址
printf("%s\n", name[1]);  // 正確:name[1] 本身就是字符串首地址

*name[1] 等價於 *(name[1]),得到字符 'g'(ASCII 103),作為地址傳給 %s 導致未定義行為。正確用法直接傳遞 name[1]。

內存佈局圖解

內存佈局示意

數組在棧上分配指針,指針指向只讀數據段的字符串常量。

最佳實踐

  • 遍歷時使用 name[i] 直接獲取字符串指針。
  • 若需修改字符串,應複製到動態分配的緩衝區。
  • 理解 char **p = name; 可實現多級間接訪問。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved