C语言-常量指针 和 指向常量的指针

记忆口诀:“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,所以是常量指针,不能改变指向!

上一篇
下一篇