常量指针(pointer pointed to constant)本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。
在C/C++中,常量指针是像这样声明的:
1)const int *p;
2)int const *p;
定义常量指针的语句格式为:const类型 * 变量 (或 类型 const * 变量)
如:
int i = 3;
int j = 5;
const int * p= &i;
则:
p = &j; /* 正确,p可以被重新赋值 */
*p = j; /* 错误,因为他改变的是p所指向的变量的值。*/
常量指针与指针常量常量指针表示一个指针指向的变量为常量及带有const属性(e.x. const int *p) , 而指针常量表示一个指针本身为常量及指针本身带有const属性(e.x. int *const p), 常量指针指向的对象由于有const属性, 无法直接改变, 但是指针本身值(及指针指向的内存地址)可以改变, 而指针常量则是指针本身有const属性, 指针的值(及指针指向的内存地址)无法直接改变, 而该地址内的变量可以改变。
例子:
const char *p = "Hello, World"; //表示指针p是一个常量字符串的首地址, 指针p为常量指针
char a[20] = "Hello, World";
char *const p = a; //表示指针p本身为常量, 它将一直指向该内存区域直到它被释放, 指针p为指针常量。(注意: 此时p的值虽然无法改变, 但是a的值可以改变。)
指针常量一般常用于当一个指针由始至终都指向一个对象时使用。