C++ 指向const对象的指针和const指针
(1)指向const对象的指针
const int* p; 或 int const* p;
这里的
p是一个指向const对象的指针,const修饰的是指针p所指的对象,而不是修饰指针p。指针p本身不是const,定义时不需要初始化。这就意味着不能通过指针p去修改所指对象的值,但是指针p所指的对象可以修改。
int a = 4;
const int* p = &a;
以上声明指出,p指向一个const int(这里为4)。因此不能使用p来修改这个值,换句话说,*p的值为const,不能被修改。
*p += 1; //error
cin>>*p; //error
a = 5; //ok
注意一点,p的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对p而言,这个值是个常量。如上例中的p指向a,而a不是const,可以通过a来直接改变a的值,但不能使用p指针来修改。
同样,p也可以指向const常量,如下:
const int b = 1;
const int* p = &b;
*p +=1; //error
b += 1; //error
以上声明意味着既不能通过p指针修改b的值,也不能通过b本身来修改。
(2)const指针
int* const p;
int a = 4;
int* const p = &a;
以上声明可以理解为p是指向一个int的const指针。这就意味着不能使p指向其他的对象,任何试图给p赋值的操作将会导致编译错误。但允许使用指针p来修改a的值。
int b = 5;
p = &b; //error
*p = 5; //ok
(3)指向const对象的const指针
const int* const p;
const int a = 7;
const int* const p = &a;
意味着既不能修改p的值,也不能通过p来修改所指对象的值 。