在C++中,const关键字的位置决定了指针和它所指向的数据哪个是常量,理解这一点对正确使用常量指针非常重要。虽然写法不同,但它们的含义有明显区别。
const在星号左边:指向常量的指针
当const出现在*的左侧时,表示指针指向的数据是常量,不能通过该指针修改数据,但指针本身可以指向其他地址。
例如:
const int* ptr;
或
int const* ptr;
这两种写法等价,都表示ptr是一个指向int类型常量的指针。你可以修改ptr让它指向别的变量,但不能通过*ptr修改它指向的值。
示例:
立即学习“C++免费学习笔记(深入)”;
int a = 10;
int b = 20;
const int* ptr = &a;
*ptr = 30; // 错误:不能修改指向的数据
ptr = &b; // 正确:可以改变指针指向
const在星号右边:常量指针
当const出现在*的右侧时,表示指针本身是常量,即指针的地址不能改变,但可以通过指针修改它指向的数据。
写法为:
int* const ptr;
这表示ptr是一个常量指针,必须在声明时初始化,并且之后不能再指向其他地址。
示例:
立即学习“C++免费学习笔记(深入)”;
int a = 10;
int b = 20;
int* const ptr = &a;
*ptr = 30; // 正确:可以修改a的值
ptr = &b; // 错误:不能改变指针指向
const在星号两侧:指向常量的常量指针
如果const同时出现在*的两边,表示指针本身不能变,指向的数据也不能通过该指针修改。
写法为:
const int* const ptr;
或
int const* const ptr;
这是最严格的限制。指针初始化后既不能改变指向,也不能修改所指向的值。
示例:
立即学习“C++免费学习笔记(深入)”;
int a = 10;
int b = 20;
const int* const ptr = &a;
*ptr = 30; // 错误:不能修改数据
ptr = &b; // 错误:不能修改指针
判断技巧:从右往左读声明。比如
const int* const ptr
,可以理解为“ptr是一个const指针,指向一个int的const值”。
基本上就这些,关键在于const相对于*的位置。记清楚这个规则,就能准确声明需要的指针类型。
评论(已关闭)
评论已关闭