简单记忆方法:
const
为常量,*
为指针*
在前const
在后,则为指针常量:* const
地址不变const
在前*
在后,则为常量指针:const *
值不变
指针常量(pointer to constant):指针指向的地址为常量
-
指针常量指向的内存地址是不可变的。
-
定义指针常量时,必须进行初始化,并且不能再修改指针的值(即指针的指向不可变)。
-
通过指针常量可以修改所指向的对象的值。
示例代码:
int value = 1; int* const ptr = &value; // ptr是指针常量,指向value的地址 *ptr = 100; // 正确,可以通过指针常量修改value的值 ptr = nullptr; // 错误,无法修改指针常量指向的地址
常量指针(constant pointer):指针指向"常量"对象的地址
-
定义常量指针时,可以不进行初始化,也可以在后续进行初始化。
-
常量指针仅要求不能通过该指针来修改该对象的值,未规定该对象的值不能通过其他途径改变。
-
常量指针指向的变量不一定是
const
,声明其为常量指针只是说明不能通过该指针修改指向变量的值,但如果变量本身并非常量,则仍可以通过其他途径修改。 -
示例代码:
int value = 1; const int* ptr = &value; // ptr是常量指针,指向value的地址 int const* ptr = &value; // 两种写法都可以 *ptr = 100; // 错误,不能通过常量指针修改value的值 ptr = nullptr; // 正确,可以修改常量指针的值,使其指向其他地址
指向常量的常指针(constant pointer to constant):
-
指针所指对象的值和地址都不能改变
-
示例代码:
int value = 1; const int* const ptr = &value; //内容与地址均不可改变 *ptr = 100; // 错误,不能修改其值 ptr = nullptr; // 错误,不能修改其地址