const T*
(或 T const*
)
-
含义:指针指向的数据是常量,数据不可修改,但指针本身可以指向其他地址。
-
示例:
const int* ptr; // 或 int const* ptr
int a = 10, b = 20;
ptr = &a; // 合法:指针可以修改指向的地址
// *ptr = 30; // 非法:不能通过 ptr 修改 a 的值
ptr = &b; // 合法:指针仍可指向其他地址
T* const
-
含义:指针本身是常量,指针的指向不可修改,但指向的数据可以修改。
-
示例:
int a = 10, b = 20;
int* const ptr = &a; // 必须在初始化时赋值
*ptr = 30; // 合法:可以修改 a 的值
// ptr = &b; // 非法:指针不能指向其他地址
const T* const
(双重常量)
-
含义:指针的指向和数据都不可修改。
-
示例:
int a = 10;
const int* const ptr = &a;
// *ptr = 20; // 非法:数据不可修改
// ptr = &b; // 非法:指针不可修改
如何阅读复杂指针声明?
从右向左解析:
-
const int* ptr
→ptr
是一个指针,指向const int
(数据不可变)。 -
int* const ptr
→ptr
是一个常量指针,指向int
(指针不可变,数据可变)。 -
const int* const ptr
→ptr
是一个常量指针,指向const int
(两者均不可变)。