一.定义
一般,说到指针和const,就分两种:const指针和指向const的指针。const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的;而指向const的指针是说指针指向的变量是const的(其实这种说法也是不太准确的,和const引用有点像)可以这样理解:一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容(只是说不能通过指针的方式去修改,如果变量本身不是const的,其实是可以通过其他的方式去修改)。
声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。例如,下面都是合法的声明,但是含义大不同:
const int * pOne; //指向整形常量 的指针,它指向的值不能修改
int * const pTwo; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const pThree; //指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。
理解这些声明的技巧在于,查看关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。下面的代码有助于说明这一点:
const int *p1; //the int pointed to is constant
//即从离变量名最近的开始解读,首先‘*’代表p1首先是个指针,然后这个指针指向的变量是const的。
int * const p2; // p2 is constant, it can't point to anything else
//首先,‘const’代表p2首先是个常量,然后这是个“int *”类型的常量,即常量指针。
还有个技巧,通过上面的观察我们不难总结出一点规律,是什么呢?这个规律就是: 指向const的指针(指针指向的内容不能被修改)const关键字总是出现在的左边而const指针(指针本身不能被修改)const关健字总是出现在的右边,那不用说两个const中间加个肯定是指针本身和它指向的内容都是不能被改变的,不过还是