常量指针
常量指针本质上是个指针,只不过这个指针指向的对象是常量。
特点:const 的位置在指针声明运算符 * 的左侧。只要 const 位于 * 的左侧,无论它在类型名的左边或右边,都表示指向常量的指针。(可以这样理解,* 左侧表示指针指向的对象,该对象为常量,那么该指针为常量指针。)
int const * ptr;
const int * ptr;
注意 1:指针指向的对象不能通过这个指针来修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。
举个栗子:
#include <iostream>
using namespace std;
int main()
{
const int c_var = 20;
const int *ptr = &c_var;
*ptr = 100; // error: assignment of read-only location '* ptr'
return 0;
}
注意 2:虽然常量指针指向的地址中的值不能改变,可是因为常量指针本身是一个指针,因此,指针指向可以改变。
举个栗子:
#include <iostream>
using namespace std;
int main()
{
const int c_var1 = 10;
const int c_var2 = 20;
const int* ptr = &c_var1;
ptr = &c_var2;
return 0;
}
就记住,cosnt修饰的是*p的时候,那么就代表*p的值是不可以改变的,*p代表的就是一个值!
指针常量
指针常量的本质上是个常量,只不过这个常量的值是一个指针。
特点:const 位于指针声明操作符右侧,表明该对象本身是一个常量,* 左侧表示该指针指向的类型,即以 * 为分界线,其左侧表示指针指向的类型,右侧表示指针本身的性质。
int * const ptr;
注意 1:指针常量的值是指针,这个值因为是常量,所以指针本身不能改变。
#include <iostream>
using namespace std;
int main()
{
int var1, var2;
int * const ptr = &var1;
ptr = &var2; // error: assignment of read-only variable 'ptr'
return 0;
}
注意 2:指针的内容可以改变。
#include <iostream>
using namespace std;
int main()
{
int var = 10;
int * const ptr = &var;
*ptr = 20;
return 0;
}
备注:指针常量,常量指针,哪个名词在前哪个不变。(指针常量---指针的指向不能变,常量指针---指针指向的地址中的值不能变)