1. 常量指针(Pointer to Constant)
定义:
常量指针是指向一个常量数据的指针,即指针指向的内容不能通过该指针被修改。
语法:
const int* ptr;
或者:
int const* ptr;
解释:
const
修饰的是指针指向的内容(即int
),表示指针指向的数据是只读的。- 指针本身可以改变指向其他地址,但不能通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
const int* ptr = &a;// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误// 正确:可以改变指针的指向
ptr = &b; // ptr现在指向b
总结:
- 指针可以指向不同的地址。
- 不能通过指针修改所指向的值。
2. 指针常量(Constant Pointer)
定义:
指针常量是一个固定的指针,指针本身的值(即指向的地址)不能改变,但可以通过该指针修改所指向的内容。
语法:
int* const ptr = &a;
解释:
const
修饰的是指针本身,表示指针一旦初始化后,其指向的地址不能改变。- 可以通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
int* const ptr = &a;// 正确:可以通过ptr修改a的值
*ptr = 30; // a现在变为30// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
- 指针的指向地址固定,不能改变。
- 可以通过指针修改所指向的值。
3. 两者的组合:指向常量的指针常量
如果同时限制指针本身的值和指针指向的内容都不能改变,可以使用以下语法:
语法:
const int* const ptr = &a;
解释:
- 第一个
const
修饰的是指针指向的内容,表示内容不可修改。 - 第二个
const
修饰的是指针本身,表示指针的指向地址不可改变。
示例代码:
int a = 10, b = 20;
const int* const ptr = &a;// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
- 指针的指向地址固定,不能改变。
- 不能通过指针修改所指向的值。
4. 总结对比
特性 | 常量指针 (const int* ptr ) | 指针常量 (int* const ptr ) | 指向常量的指针常量 (const int* const ptr ) |
---|---|---|---|
指针指向的地址是否可变 | 是 | 否 | 否 |
指针指向的内容是否可变 | 否 | 是 | 否 |