在 C++ 中,常量指针和指针常量是两种容易混淆的概念,它们的主要区别在于 const 关键字修饰的对象不同。
常量指针 (Pointer to Constant)
常量指针是指向常量的指针,即指针可以改变指向的对象,但不能通过该指针修改所指向的对象的值。
const int* ptr; // 常量指针
int const* ptr; // 等价写法
特点:
指针可以指向不同的对象
不能通过该指针修改所指向的对象的值
所指向的对象本身可以是常量也可以是非常量
int a = 10;
const int b = 20;
const int* ptr = &a; // 合法
ptr = &b; // 合法,可以改变指针指向
// *ptr = 30; // 非法,不能通过ptr修改值
指针常量 (Constant Pointer)
指针常量是指针本身是常量,即指针一旦指向某个对象后就不能再指向其他对象,但可以通过该指针修改所指向的对象的值(如果对象本身不是常量)。
int* const ptr; // 指针常量
特点:
指针一旦初始化后就不能改变指向
可以通过指针修改所指向的对象的值(如果对象不是常量)
指针本身是常量,但指向的对象可以是常量也可以是非常量
int a = 10;
int b = 20;
int* const ptr = &a; // 合法
*ptr = 30; // 合法,可以通过ptr修改a的值
// ptr = &b; // 非法,不能改变ptr的指向
指向常量的指针常量 (Constant Pointer to Constant)
这是前两种情况的结合,指针本身是常量,且指向的对象也是常量。
const int* const ptr; // 指向常量的指针常量
特点:
指针不能改变指向
不能通过指针修改所指向的对象的值
const int a = 10;
const int b = 20;
const int* const ptr = &a; // 合法
// *ptr = 30; // 非法
// ptr = &b; // 非法
记忆技巧
可以按照 const 关键字的位置来记忆:
const在 *左边:指向常量(常量指针)
const在 *右边:指针本身是常量(指针常量)
const在 *两边都有:指向常量的指针常量
496

被折叠的 条评论
为什么被折叠?



