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 在記憶體位置上後移一格.
從而達成字串讀取+位移.