常量指针是指向常量的指针,指针本身可变,但不能通过指针修改所指向的数据;指针常量是值不可变的指针,一旦初始化后不能指向其他地址,但可修改所指向的数据(除非数据为const);常量指针常量既不能改变指向,也不能通过指针修改内容。

常量指针和指针常量是C++中两个容易混淆的概念,它们的区别主要在于“谁是常量”——是指针本身不能变,还是指针指向的数据不能变。
常量指针(const pointer)
更准确的说法是“指向常量的指引”,即指针指向的内容是常量,不能通过该指针修改所指向的数据。指针本身可以改变,能指向其他地址。
语法形式:const 类型 *指针名; 或 类型 const *指针名;
特点:
- 指针指向的内容不可修改
- 指针本身可以重新赋值,指向别的地址
示例:
立即学习“C++免费学习笔记(深入)”;
const int a = 10; const int b = 20; const int *ptr = &a; // *ptr = 15; // 错误:不能修改指向的内容 ptr = &b; // 正确:可以改变指针指向
指针常量(pointer to const)
也叫“常指针”,是指指针本身的值(即它保存的地址)不能改变,一旦初始化后就不能再指向别的变量。但可以通过指针修改所指向的内容(除非数据本身也是const)。
语法形式:类型 *const 指针名;
特点:
- 指针必须在定义时初始化
- 指针不能重新赋值,不能指向别的地址
- 可以修改所指向的数据(除非数据也是const)
示例:
立即学习“C++免费学习笔记(深入)”;
int a = 10; int b = 20; int *const ptr = &a; *ptr = 15; // 正确:可以修改a的值 // ptr = &b; // 错误:不能改变指针指向
常量指针常量(指向常量的常指针)
指针本身是常量,且指向的内容也是常量。既不能修改指向,也不能通过指针修改内容。
语法形式:const 类型 *const 指针名; 或 类型 const *const 指针名;
示例:
立即学习“C++免费学习笔记(深入)”;
const int a = 10; const int b = 20; const int *const ptr = &a; // *ptr = 15; // 错误:不能修改内容 // ptr = &b; // 错误:不能修改指针
判断技巧:从右往左读声明。
比如:const int *ptr → ptr 是一个指针,指向一个 int 类型的常量。
int *const ptr → ptr 是一个常量指针,指向一个 int 类型。
基本上就这些,关键看 const 修饰的是 * 还是指针名。










