1.指向常量的指针:
int a=1;
const int*pl =&a;
pl:即为指向常量的指针!
无法通过pl改变a的值,但可以通过a改变自身的值,同时也可以改变pl所指地址!
如下:
int a=1;
const int*pl =&a;
int b=2;
pl=&b;
此时pl指向b,而不再指向a!
注意:
C++禁止将const的地址(&a) 赋给 非常量的指针。
eg:const int a=1;
将const 的地址赋给非常量的指针后 即可通过非常量指针改变const所指常量的值,违背了const的原本意义!!!
(因此,C++同样禁止:将const指针(常量数组)赋给函数中的非const指针(数组))
将指针参数声明为指向常量的指针有两大优点:
int sum ( const int* ar[] , int n)
sum(pl[],10);
1.无法通过函数sum改变传递给指针(数组)ar的pl[]指针的值,即pl[]不受函数sum的影响!
(在函数sum中无法通过const指针ar改变原指针(实参),避免了无意间改变数据而导致的编程错误!)
2.const int* ar[ ] 不仅可以接受非const数据(指针),还可以接受const数据!
2.常量指针:
int a=1;
int* const pl=&a;
常量指针pl只能指向a,但可通过pl修改a的值,也可通过a自身修改!