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