在我看来,不必太纠结于常量指针和指针常量的汉语名称,一定要记住用法就好了。
记有一指针,p表示地址,*p表示值。
1、常量指针
书写方式有const int *p或者int const *p。
在这种情况之下,const始终在*p之前,也就是说const(常量)修饰*p(指针的值)。*p不能修改,就是说该指针指向的值不能修改。
在这种情况之下,*p是只读的。
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int const *p = &a;
cout<<a<<endl;
cout<<*p<<endl;
return 0;
}
如果修改*p的值,会报错: assignment of read-only location'*p';
注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。在上例中可以通过改变a来改变*p的值。
2、指针常量
书写方式是int * const p;
const p表示地址不可改变,也就是说指针常量的地址不可修改。
int a = 10;
int * const p = &a;
此后p始终指向a,不可修改。
3、野指针
迷途指针,也被称为野指针或悬浮指针,是指将delete 用于指针(从而释放它指向的内存),但没有将它设置为空时引发。如果随后你在没有重新赋值的情况下使用该指针,后果将是不可预料的。
上例中在释放内存后,要将地址指向NULL。
delete p;
p = NULL;
为了安全,这是很有必要的。