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