常量指针和指针常量

1.常量指针

由于指针的对于内存地址操作的随意行,也容易产生错误的修改或者破坏内存中的数据,因此有时候需要对内存中的数据加上写保护。

我们知道在数据类型里有一种常量类型,可以保证数据没有办法被修改,指针的保护也是基于这个思想,当一个指针成为常量的时候,我们称它为常量指针,具有这种属性的指针只能够读出内存中的数据,却不能修改内存中的数据。

我们来看一个例子就知道了。

  1. int i=4;  //原始数据  
  2. const int *p=&i;  //常量指针  
  3. *p=*p+1;  //此步编译器错误,这里的*p是没办法修改数据i的,已经"保护"了,不能修改内存中的数据  
  4. p=p+1;  //这里没有问题,而指针本身是可以修改数据的  
  5. cout<<*p;  

2.指针常量

这里边还一种叫做指针型常量,和常量指针刚好功能上是相反的,其所指向的位置不能修改,即指针本身是一个常量,但是指针常量可以通过间接引用修改内存中的数据。接下来还是看一段代码:

  1. #include "iostream.h"  
  2. void main()  
  3. {  
  4.     int a=42;  
  5.     const int b=84;  
  6.     const int *captr=&a;//常量指针  
  7.     int * const acptr=&a;//指针常量  
  8.     int *bptr=&b;//错误,不能把常量的地址给指针变量  
  9.     const int *cbprt=&b;//把常量的地址给常量指针是允许的  
  10.     *captr=68;//错误,间接引用常量指针不可修改内存中的数据  
  11.     *acptr=68;//间接引用指针常量可以修改内存中的数据  
  12.     captr=&b;//常量指针可以指向其他变量  
  13.     acptr=&b;//错误,指针常量不能指向别的变量  
  14.     const int * const ccaptr=&a;//常量指针常量,既不能间接引用修改数据,也不能指向别的变量或常量  
  15.     *ccaptr=68;//错误,不能间接引用修改数据  
  16.     ccaptr=&b;//错误,不能指向别的常量或变量  
  17. }  

3.总结

常量指针定义公式:const int *p=&a;不可以通过p修改a的值,而p本身可以改变,a可以是常量类型。

指针常量第一公式:int * const p=&a;可以通过p修改a的值,p本身不可以修改,a不可以是常量类型。

4.参考

《易学C++》潘嘉杰

posted @ 2011-07-05 12:53  elwin  阅读(145)  评论(0)    收藏  举报