记忆口诀:“const 在哪边,哪边就不能改”
方法1:看 const
的位置
// 1. const 在 * 左边 → 指向的内容不能改
const char * ptr; // 指向常量的指针
char const * ptr; // 同上,写法不同
// 2. const 在 * 右边 → 指针本身不能改
char * const ptr; // 常量指针
// 3. 两边都有 const → 都不能改
const char * const ptr; // 指向常量的常量指针
方法2:“从右往左读”
const char * ptr;
从右往左读:”ptr
是一个指针,指向 char
类型的常量” → 内容不能改,指针可以改
char * const ptr;
从右往左读:”ptr
是一个常量指针,指向 char
类型” → 指针不能改,内容可以改
方法3:实际例子记忆
// 指向常量的指针 - "内容守护者"
const char * ptr = "hello";
*ptr = 'H'; // ❌ 不能改内容
ptr = "world"; // ✅ 可以改指向
// 常量指针 - "位置守护者"
char str[] = "hello";
char * const ptr = str;
*ptr = 'H'; // ✅ 可以改内容
ptr = str2; // ❌ 不能改指向
记忆技巧
“左const守内容,右const守指针”
const
在左边(*
左边)→ 内容是常量const
在右边(*
右边)→ 指针是常量
数组名 name
就相当于 char * const name
,所以是常量指针,不能改变指向!