C++ 簡單理解 const char 的四種 pointer 形態.

C++ 簡單理解 const char 的四種 pointer 形態.

void ConstTest01() {
	const char * txt = "Hello world";
	char chr = 'C';
	char chr2 = 'H';

	char        *           c1 = &chr;	// pointer & value can change.
	char const  *           c2 = &chr;	// pointer can change, value CONST.
	char        * const		c3 = &chr;	// pointer CONST, value can change.
	char const  * const		c4 = &chr;	// pointer CONST, value CONST
    // To find out the error
	//c1++; *c1 = chr2;
	//c2++; *c2 = chr2;
	//c3++; *c3 = chr2;
	//c4++; *c4 = chr2;
}

簡單的判斷 rule : const 其實是在形容前一個運算子的儲存狀態是”不能更改”,

所以 char const 在形容 char 是不能更改的值.
char const * const 則是 形容 char 不能更改, pointer 也不能更改.

額外的是 const char * 是舊的寫法, 現在的 compiler 編譯是其實等同於 char const *,

而 char const * 為甚麼能夠吃上一大條字串, 其實是因為這種不能更改的字串值會存放於 memory 中連續的地址上.
可以想像為
char const * ch = “Hello World”;
等同於宣告
char[] txt = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ‘, ‘W’, ‘o’, ‘r’, ‘l’, ‘d’, 0 }; \\ string must end by zero (0) digit.
char const * ch = txt[0];

而所謂的 ch++ 則是控制 pointer 在記憶體位置上後移一格.
從而達成字串讀取+位移.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料