在C++中,指针是一种非常重要的数据类型,它存储的是一个对象或变量的地址。指针是C++中最常用的数据结构,有时候也会存在指向常量的指针。而常指针就是一个指向常量类型的指针,即指针指向一个常量对象或者是一个常量表达式。
常指针的定义方法为在指针定义时,在类型前面加上const关键字即可,指针不可修改所指对象的值:
const int *p; //定义一个指向常量整型的指针p,因为指针指向整型,所以指针前面要加 constint const *q; //等同于上面,把 const 放在类型前面或后面都可
如果使用指针修改所指对象的值会导致编译错误。
const int i = 10;int *p = &i; //编译错误,不能将指向常量的指针赋给普通指针
常指针与常量的区别在于指针本身的值是否可修改,常量是值不能修改,而常指针是指针的值不能修改。
const int i = 10; //定义一个常量iint const *p = &i; //定义一个指向常量的指针p
p = NULL; //可以更改指针p的值
int j = 20;
p = &j; //可以修改p所指的对象,但不能通过p来修改j的值,否则编译错误
*p = 30; //编译错误
常指针常用于函数参数中,表示函数对该指针指向的对象只读,不能对其进行修改。
void func(const int *p); //定义一个函数,参数为指向常量整型的指针int main() {
int i = 10;
func(&i); //调用函数,传入参数为i的地址
return 0;
void func(const int *p) { //对函数参数进行修改时会编译错误
*p = 20; //编译错误
}
常指针是指针指向的对象是一个常量,而指针常量是指针本身是一个常量,不可以更改指针指向的地址。
int i = 10;int j = 20;
int const *p1 = &i; //指向常量的指针p1不能通过指针修改 i 的值
int *const p2 = &i; //指针常量p2不能修改指针指向的地址,即不能做如下操作:
p2 = &j; //编译错误,指针常量的值不能改变
*p2 = 30; //可以通过指针修改 i 的值