const指针
const
限定符要求 ptr
必须在定义时初始化。
// `const int *ptr` 和 `int const *ptr` 等价
const int* ptr;
// 或
int const *ptr;
含义:指针 ptr
指向的值不能修改,但 ptr
本身可以指向其他地址。
可以 指向不同的变量(可以 ptr = &b;
); 不能 修改指向的变量的值(不能 *ptr = 15;
)。
int *const ptr = &a;
// 等价
int* const ptr = &a;
int* const ptr; // ❌ 错误!常量指针必须初始化
// 编译器报错
error: uninitialized const ‘ptr’ [-fpermissive]
含义:ptr
的地址不能修改(不能 ptr = &b;
),但 ptr
指向的值可以修改。
可以 修改指向的值(可以 *ptr = 15;
);不能 指向其他变量(不能 ptr = &b;
)。
因为 ptr
是 const
,意味着它的地址在创建时就必须确定,不能留到之后再赋值。
const int* const ptr = &a;
含义:既不能修改 ptr
指向的值,也不能改变 ptr
的指向。
不能 修改指向的值(不能 *ptr = 15;
);不能 指向其他变量(不能 ptr = &b;
)。
四种指针的对比
类型 | 作用 |
---|---|
int *ptr | 普通指针,既能修改指向的值,又能修改指针的指向 |
const int* ptr 或 int const *ptr | 指向的值不能修改,但指针的指向可以修改 |
int* const ptr | 指针的指向不能修改,但指向的值可以修改 |
const int* const ptr | 既不能修改指针的指向,也不能修改指向的值 |
实际应用场景
-
const int *ptr
(保护数据不被修改)-
用于防止函数修改参数值。
-
避免函数内部无意中修改传入的数据。
-
-
int* const ptr
(保护指针地址不被修改)- 用于管理资源,确保指针不会改变所指向的对象。
-
const int* const ptr
(完全不可变)- 适用于只读配置。
判断const限定符的作用要看的位置:const在左边限定指向的值,在*右边限定指针本身