1. 程式人生 > >關於“指向常量字串的字元指標不可更改字串內容”的理解及引申

關於“指向常量字串的字元指標不可更改字串內容”的理解及引申

一、程式碼說明:

#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';",但不能把一個字串常量賦給一個字元變數,同時也不能對字串常量賦值。