当我们在模块化程序设计时,有一些数据希望共享,而又不希望其他程序修改它,也就是”只读“,我们常用const来修饰它。
指向const常量的指针:一个指针,如果通过它实施的间接引用操作只能读取不能修改,即它指向的空间是只读的,我们称这个指针为指向const常量的指针或只读指针。
const int *pc; 或 int const* pc;
表示指向const常量的整形指针,并不是说给他传址的变量必须是const常量型,而是指任何类型的变量的地址传给他,他都不能间接的修改该变量的值!
如: int n = 5;
const int *pn;
pn = &n;
*pn = 6; //非法!不能修改该指针间接引用的数据
n = 6; //合法
当然,一个const常量型要传址,必须传给指向const常量的指针。一般“只读”函数中会用到指向常量的的指针,即函数操作只读目标空间的内容而不做修改,如求和、打印函数。
const常量指针:如果指针本身是常量型,那么称为const常量指针。
如:int a = 5;
int * const pc = &a; // 因为指针本身是常量型,所以常量指针必须初始化
*pc = 6; //可以修改常量指针所指向单元的内容
注意哦,常量指针可以修改指向的数据!所以不能把const常量型数据传址给常量型指针!
与指向const常量的指针不同,const常量指针可以赋值给非const常量指针。const常量指针是指它存储的地址是不能改变的,它赋值给非常量指针的是地址值拷贝,其自身存储的地址并不改变。一般那些要用到数据地址空间固定的函数可以用常量指针,如数组操作。
总之呢,指向常量的指针就是说这个变量是只读的,你用这个指针不能修改它,const修饰符在 * 前。
常量指针就是这个指针所指向的地址单元是固定的,const修饰符在 * 后。