- 指针常量是指定义的指针只能在定义的时候初始化,之后不能改变其值,格式如下:【数据类型】【*】【const】【指针常量名称】;
实例如下:
1 | char * const p1; |
2 | int * const p2; |
const 位于指针声明符“*”的右侧,这说明声明的对象是一个常量,而对象的数据类型是指针。所以第一句定义了一个只读的字符型指针p1;第二句定义了一个只读的整型指针p2。常指针的值不能改变,但是其指向的内容却可以改变。如下列:
#include<iostream>
using namespace std;
int main()
{
char a[5]="abcd";
char b[5]="efgh";
char * const p1=a;
char * const p2=b;
cout<<"Before Change:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
*p1='1';
b[0]='2';
//p1=p2;
cout<<"After Changed:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
getchar();
return 0;
}
输出结果:
去掉注释则编译出错:error C3892: “p1”: 不能给常量赋值(VS 2005);
指针所指向的内存地址不能更改,指针的值只能在定义的时候初始化,其他地方不能更改。
2.常量指针是指向常量的指针。因为常量指针指向的对象是常量,因此这个对象的值是不能够改变的。定义的格式如下:
【数据类型】【const】【*】【常量指针名称】;
或
【const】【数据类型】【*】【常量指针名称】;
如下例:
#include<iostream>
using namespace std;
int main()
{
char a[5]="abcd";
char b[5]="efgh";
const char * p1=a;
const char * p2=b;
cout<<"Before Change:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl<<"p1:"<<p1<<endl; a[0]='1';
p1=p2;
//*p2='2';
cout<<"After Changed:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl<<"p1:"<<p1<<endl;
getchar();
return 0;
}
输出结果:
如果去掉注释则编译出错:error C3892: “p2”: 不能给常量赋值;
可以看出,常量指针所指向的对象的值是不能通过常量指针来改变。这一特性常被用于函数参数的传递。