const int*, int * const 和 const int * const 在 C++ 中的区别
大家好!我刚开始学习 C++,但在指针上下文中使用关键字 `const` 时完全搞不清楚。我看到三个不同的声明,彻底糊涂了:
1. `const int* ptr;`
2. `int* const ptr;`
3. `const int* const ptr;`
为什么它们含义不同?哪个允许修改指针指向的值,哪个允许修改指针本身?我写了一个小例子:
```cpp
int a = 10;
int b = 20;
const int* p1 = &a;
// *p1 = 30; // 如果取消注释,会报错
p1 = &b; // 可以工作
int* const p2 = &a;
*p2 = 30; // 可以工作
// p2 = &b; // 如果取消注释,会报错
const int* const p3 = &a;
// *p3 = 30; // 报错
// p3 = &b; // 报错
```
我的理解是否正确:`const` 在星号左边保护数据,在右边保护指针本身?或者有更简单的记忆规则?请解释一下这是如何工作的,以及在什么情况下使用哪种声明。提前感谢!
<<>>