關於“指向常量字串的字元指標不可更改字串內容”的理解及引申
阿新 • • 發佈:2019-01-10
一、程式碼說明:
#include <iostream> using namespace std; int main() { string str = "hello1"; // 字串變數 // 字元陣列,先在常量區儲存"hello2",然後在棧區申請記憶體空間, // 將"hello2"複製過去,str指向棧區的"hello2" char arr[] = "hello2"; char *p = "hello3"; // 注意p指向常量字串,在常量區儲存"hello3",p直接指向常量區的"hello3" str[0] = 'X'; // 可成功修改 arr[0] = 'X'; // 可成功修改 p[0] = 'X'; // 編譯器不能發現該錯誤,但執行時錯誤,p指向常量區內容,該區域內容不能被修改 str = "hello1 world"; // 可成功修改 arr = "hello2 world"; // 錯誤,arr是陣列名,相當於指標常量,指向不能改變 p = "hello3 world"; // 可成功修改,p指向另一個字串常量 system("pause"); return 0; }
二、要點說明:
1、在一個雙引號""內的字元序列或者轉義字元序列稱為字串常量。這些字串常量儲存在常量儲存區。其內容不可被更改。(常量儲存區:這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。與靜態儲存區有區別)
2、字元常量可以賦值給字元變數,如"char b='a';",但不能把一個字串常量賦給一個字元變數,同時也不能對字串常量賦值。