常量指针和指针常量
1.常量指针
由于指针的对于内存地址操作的随意行,也容易产生错误的修改或者破坏内存中的数据,因此有时候需要对内存中的数据加上写保护。
我们知道在数据类型里有一种常量类型,可以保证数据没有办法被修改,指针的保护也是基于这个思想,当一个指针成为常量的时候,我们称它为常量指针,具有这种属性的指针只能够读出内存中的数据,却不能修改内存中的数据。
我们来看一个例子就知道了。
- int i=4; //原始数据
- const int *p=&i; //常量指针
- *p=*p+1; //此步编译器错误,这里的*p是没办法修改数据i的,已经"保护"了,不能修改内存中的数据
- p=p+1; //这里没有问题,而指针本身是可以修改数据的
- cout<<*p;
2.指针常量
这里边还一种叫做指针型常量,和常量指针刚好功能上是相反的,其所指向的位置不能修改,即指针本身是一个常量,但是指针常量可以通过间接引用修改内存中的数据。接下来还是看一段代码:
- #include "iostream.h"
- void main()
- {
- int a=42;
- const int b=84;
- const int *captr=&a;//常量指针
- int * const acptr=&a;//指针常量
- int *bptr=&b;//错误,不能把常量的地址给指针变量
- const int *cbprt=&b;//把常量的地址给常量指针是允许的
- *captr=68;//错误,间接引用常量指针不可修改内存中的数据
- *acptr=68;//间接引用指针常量可以修改内存中的数据
- captr=&b;//常量指针可以指向其他变量
- acptr=&b;//错误,指针常量不能指向别的变量
- const int * const ccaptr=&a;//常量指针常量,既不能间接引用修改数据,也不能指向别的变量或常量
- *ccaptr=68;//错误,不能间接引用修改数据
- ccaptr=&b;//错误,不能指向别的常量或变量
- }
3.总结
常量指针定义公式:const int *p=&a;不可以通过p修改a的值,而p本身可以改变,a可以是常量类型。
指针常量第一公式:int * const p=&a;可以通过p修改a的值,p本身不可以修改,a不可以是常量类型。
4.参考
《易学C++》潘嘉杰

浙公网安备 33010602011771号