首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符指針與字符串常量存儲機制

     編輯:關於C語言

字符串常量內存佈局

字符串常量(如 "a string")存放在靜態存儲區,程序運行期間始終佔用。編譯器自動在末尾添加 \0 作為結束標誌,故實際佔用字節數 = 字符數 + 1。

兩種操作字符串常量的方法

方法一:字符數組初始化

char s[] = "a string";
// s 有 9 個元素,s[8] = '\0'
// 編譯器將字符串拷貝到數組,屬於初始化

方法二:字符指針指向字符串常量

char *cp;
cp = "a string";
// cp 指向字符串常量首字符 'a'
// 字符串常量在表達式中退化為字符指針

內存圖示:

cp
┏━━━┓   ┏━┳━┳━┳━┳━┳━┳━┳━┳━┓
┃   ┃──→┃a ┃ ┃s ┃t ┃r ┃i ┃n ┃g ┃\0┃
┗━━━┛   ┗━┻━┻━┻━┻━┻━┻━┻━┻━┛

指針訪問字符串

  • *cp 或 cp[0] → 首字符 'a'
  • cp[i] 或 *(cp+i) → 第 i 個字符

關鍵限制

⚠️ 不可通過指針修改字符串常量內容。字符串常量處於只讀區,嘗試修改導致未定義行為(通常崩潰)。若需可修改字符串,請使用字符數組:

char s[] = "modifiable"; // 正確:數組在棧上,可修改
char *p = "read-only";   // 僅讀

總結

  • 字符數組:擁有內存所有權,可修改,大小固定
  • 字符指針:指向只讀常量區,不可修改,靈活指向不同字符串
  • 函數參數傳遞字符串時常用 const char * 表示不修改
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved