(1)
const 修饰的指针
const int* p;
一旦p指向一块内存空间,p指向的内存空间的值无法通过*p进行修改。
如
const int* p;
int a=1,b=2;
p=&a;
可以看到此时程序正常运行。
当进行对指针p指向的内存的值进行修改时编译器报错,因为const修饰int类型的指针p限制了指针p修改值的操作,通过变量a仍然可以修改a的值。
可以看到此时无法通过指针p修改a的值,编译器说*p是只读的,不可以修改。
下面我们用a修改一下看看
可以看到const int* p只限制了指针p修改值的能力,对a并无影响,由于指针p与变量a共用一片内存空间,故const修饰的作用是限制通过指针p修改变量的值。
看看const int *p可不可以修改指向的内存空间呢?答案是肯定的
(2)
int* const p使用时必须在定义时使其指向一片内存空间之后指向的内存空间不可变
如
可以看到指针p此时指向a,这时我们修改p使其指向b看看会发生什么,
编译器报错说p是只读的无法修改
那我们通过指针p修改一下变量a的值看看能不能行?
可以看到int * const p可以通过指针p修改变量的值,但无法修改p指向的变量
综上所述,const int * p ,const修饰的是*p,故*p无法修改但是p可以修改;int * const p,const 修饰的是p故无法修改p但是可以修改*p。