【c++】const指针
参考:《c++从入门到精通》 人民邮电出版社
const表示的量是一个常量,那指针类型的数据能不能也使用const呢?
当然可以。可以在指针类型的前面或后面使用关键字const。const指针有下列两种形式:
const int *p1 =&a; //指向整型常量的指针,其指向的值不能改变
int* const p2 =&b; //指向整型常量的指针,其指向的地址不能改变
其中,p1是指向整型常量的指针,其指向的值(*p1)不能改变,但可以改变它所指向的地址和变量的值(a的值);p2指向整型常量的指针,其指向的地址(&b)不能改变,但可以改变它所指向的值(*p2)。
下面看编程实例:
原始:
#include<iostream>
using namespacestd;
int main()
{
int a=1,b=2,c=3;
const int *p1; //正确
int* const p2; //会报错!!!未初始化
p1=&a;
p2=&b; //错误!p2指向的地址不能改变
cout<<"*p1:"<<*p1<<endl;
cout<<"*p2:"<<*p2<<endl;
return 0;
}
其中,int* const p2; // 未初始化,会报错。这是因为p2指向的地址不能改变,所以需要给他初始化。
修改后:
int* constp2=&b; //初始化,通过
再修改:
int* constp2=&b; //初始化,通过
p2=&c; //错误
第二句会报错,是因为p2指向的地址不能改变,它只能指向b,不能指向其他变量(地址)。但可以改变*p2指向的值,如下:
*p2=3; //正确
修改后:
const int *p1; //指向整型常量的指针,其指向的整数不能改变
p1=&a;
*p1=5; //新增
其中,*p1=5 会报错,因为p1是指向整型常量的指针且其指向的值不能改变。
再修改:
const int *p1; //指向整型常量的指针,其指向的整数不能改变
p1=&a;
//*p1=5; //会报错
a=5;//新增,通过
其中,*p1=5 会报错,而a=5便可以通过,因为p1指向的值不能改变,但可以直接改变变量a的值。
综上比较:
p1=&c; //正确,p1可以改变指向的地址
p2=&c; //错误,p2不可改变指向的地址
*p1=10; //错误,p1指向的值不可改变
*p2=10; //正确,p2指向的值可改变
所以:
const int *p1 =&a; //p1指向的值不能改变,但指向的地址可变
int* const p2 =&b; //p2指向的地址不能改变,但其指向的值可改变
------------------------------------------- END -------------------------------------