(1)指针常量,将指针的指向当成常量。即指针变量的值只能在定义的时候初始化,定义后不能修改,也就是说不能改变指针变量的指向。但是不影响所指对象的访问特征。其定义形式为:
类型 * const 指针 //类型是该指针所指对象的类型,*为指针类型说明符。
实例1:
int var1 = 100; int var2 = 200; //初始化指针常量, int *const const_P1 = &var1; //指针常量值定义指针的指向不能修改, //如,这里将const_P1指向var2的地址,就错了, //下面的语句会报错 const_P1 = &var2; //但是,指针常量不影响指针所指对象的访问特征, //即,这里可以修改const_P1的对象的值 *const_P1 = 200; //输出200; cout << *const_P1 << endl; //输出200; cout << var1 << endl;
(2)常量指针,又称为指向常量的指针,意思是,将指针所指的对象当成一个常量,即其访问特征为常量,但是,指针的指向可变。定义的形式:
类型 const * 指针 或者 const 类型 * 指针 //类型是该指针所指对象的类型,*为指针类型说明符。
实例2:
int var1 = 100; const int var2 = 200; const int * P1; const int * P2; P1 = &var1; //上面的语句将P1指向var2,就是将其访问特性设置为常量,即不可修改, //所以下面的语句会报错。 *P1 = 1000; //常量指针不影响指针的指向,所以这里可以重新指向var2 P1 = &var2;
注意:a、常量指针,无论所指的对象是否为常量,均不能通过*p修改。
b、为了保证标识常量的只读性,常量的地址只能赋给常量指针(即指向常量的指针)。
(3)总结的来说,指针常量,就是把指针当成常量(指向不可变);常量指针,就是把所指对象当成常量。
如果读者,对此还是记不住的话,可以参考这篇文章:http://www.cnblogs.com/jonnyyu/archive/2005/06/19/89766.html