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

C 語言字符數組與指針初始化差異:賦值 vs 初始化、棧拷貝 vs 指向只讀區

     編輯:程式設計綜合問答

四種形式本質:

代碼類型動作合法性內存圖
`char str[] = "123";`數組定義+初始化編譯器分配 4 字節棧內存,**拷貝** "123\0" 進入✅棧可讀寫
`char str[4]; str = "123";`數組定義 + **賦值**數組名為**常量指針** (不可修改左值),不能賦值❌ 編譯錯誤—
`char *str = "123";`指針定義+初始化指針指向**只讀數據段** "123\0" 首地址✅只讀區
`char *str; str = "123";`指針定義 + 賦值指針指向只讀數據段首地址✅只讀區

核心規則

  • **數組名不是左值**,不能整體賦值,只能逐元素賦值 (`strcpy`/`memcpy`/循環)。
  • **字符串字面量** 存儲在只讀段,指針指向它**不可修改內容**。
  • 需可修改字符串 → **數組初始化** 或 `malloc`/`new` 動態分配後 `strcpy`。

記憶口訣

「數組初始化拷貝數據,數組賦值編譯報錯;指針初始化指向常區,指針賦值同理,修改內容必崩潰。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved