int vb = 11;
// 指针 常量 指针
// 定义 指向 地址
int* pa = &vb;
cout << pa << endl;
cout << *pa << endl;
cout << "sizeof *pa " << sizeof(*pa) << endl;
1. 常量指针(Pointer to Constant)
含义:指针指向的值是常量,不能通过指针修改这个值,但指针本身可以指向其他地址。
语法:
const int* ptr;
记忆技巧:
const
在*
前面,表示指向的值是常量。例子:
int a = 10; int b = 20; const int* ptr = &a; // ptr 指向 a,a 的值是常量 // *ptr = 30; // 错误!不能通过 ptr 修改 a 的值 ptr = &b; // 正确!ptr 可以指向其他地址
2. 指针常量(Constant Pointer)
含义:指针本身是常量,不能指向其他地址,但可以通过指针修改指向的值。
语法:
int* const ptr;
记忆技巧:
const
在*
后面,表示指针本身是常量。例子:
int a = 10; int b = 20; int* const ptr = &a; // ptr 是常量,只能指向 a *ptr = 30; // 正确!可以通过 ptr 修改 a 的值 // ptr = &b; // 错误!ptr 不能指向其他地址
3. 常量指针常量(Constant Pointer to Constant)
含义:指针本身是常量,且指向的值也是常量。
语法:
const int* const ptr;
记忆技巧:两个
const
,一个在*
前面,一个在*
后面。例子:
int a = 10; int b = 20; const int* const ptr = &a; // ptr 是常量,且指向的值也是常量 // *ptr = 30; // 错误!不能通过 ptr 修改 a 的值 // ptr = &b; // 错误!ptr 不能指向其他地址
4. 总结对比
类型 | 语法 | 指针能否改变 | 指向的值能否改变 |
---|---|---|---|
常量指针 | const int* ptr; | 可以 | 不可以 |
指针常量 | int* const ptr; | 不可以 | 可以 |
常量指针常量 | const int* const ptr; | 不可以 | 不可以 |
5. 记忆技巧
const
在*
前面:指向的值是常量(常量指针)。const
在*
后面:指针本身是常量(指针常量)。- 两个
const
:指针和指向的值都是常量(常量指针常量)。
6. 实际应用场景
- 常量指针:当你希望保护数据不被修改时使用。
- 指针常量:当你希望指针固定指向某个地址时使用。
- 常量指针常量:当你既希望指针固定,又希望数据不被修改时使用。