C++中`const int*` 与 `int* const` 的区别及记忆技巧
C++中const int*
与 int* const
的区别及记忆技巧
在C++中,指针与const
组合使用时,初学者往往容易混淆const int* d
和int* const e
的含义与用法。本文通过清晰的规则和记忆技巧,帮助快速掌握它们的区别。
一、核心规则:const
的位置决定修饰对象
const
在*
左侧:修饰的是指针指向的内容,内容不可修改,但指针可以指向其他地址。
示例:
const int* d;
const
在*
右侧:修饰的是指针本身,指针不可修改,但内容可修改。
示例:
int* const e;
二、简单的记忆技巧
技巧一:“左定内容,右定指针”
const
在左侧锁定指向的内容不能改变。const
在右侧锁定指针本身不能改变。
技巧二:“从右往左读”
const int* d
→ “d是一个指针,指向常量的int”(内容不可变)int* const e
→ “e是一个常量指针,指向int”(指针不可变)
三、示例讲解
(1)const int* d
(指向常量的指针)
int a = 10;
int b = 20;
const int* d = &a;
*d = 30; // 错误:内容不可修改
d = &b; // 正确:指针可以重新指向
用途:一般用于保护数据不被修改,例如函数参数。
(2)int* const e
(常量指针)
int a = 10;
int b = 20;
int* const e = &a;
*e = 15; // 合法,内容可修改
// e = &b; // 非法:e本身不可重新指向
用途:适合固定一个指针位置,但可以修改指向的数据。
(3)综合情况:const int* const f
表示指针和内容均不可修改。
int a = 10;
const int* const f = &a;
*f = 20; // 非法:内容不可修改
f = &b; // 非法:指针也不可修改
四、综合对比表格
类型 | 能否修改指针指向 | 能否修改指向的内容 | 典型使用场景 |
---|---|---|---|
const int* d | 可以 | 不可以 | 防止修改数据 |
int* const e | 不可以 | 可以 | 固定指针指向 |
const int* const f | 不可以 | 不可以 | 固定数据和指针 |
四、练习巩固
判断下列代码是否合法:
const int a = 100;
int b = 200;
const int* p1 = &a; // 合法
*p1 = 30; // 非法,内容不可修改
p1 = &b; // 合法,指针可修改
int* const p2 = &b; // 合法
*p2 = 40; // 合法,内容可修改
p2 = &a; // 非法,指针不可修改
四、常见场景
- 使用
const int*
保护被传入函数的数据不被函数修改。 - 使用
int* const
确保指针始终指向特定的内存区域。
四、总结对照表
类型 | 指针能否修改? | 指向内容能否修改? |
---|---|---|
const int* d | ✅ | ❌ |
int* const e | ❌ | ✅ |
const int* const f | ❌ | ❌ |
记住这张表格,随时回顾,快速掌握知识。
五、最终小结
通过牢记以下口诀:
左定内容,右定指针
即可清晰区分const int*
和int* const
的用法。