- 指針常量是指定義的指針只能在定義的時(shí)候初始化,之后不能改變其值,格式如下:【數(shù)據(jù)類型】【*】【const】【指針常量名稱】;
實(shí)例如下:
| 1 | char * const p1; |
| 2 | int * const p2; |
const 位于指針聲明符“*”的右側(cè),這說明聲明的對象是一個(gè)常量,而對象的數(shù)據(jù)類型是指針。所以第一句定義了一個(gè)只讀的字符型指針p1;第二句定義了一個(gè)只讀的整型指針p2。常指針的值不能改變,但是其指向的內(nèi)容卻可以改變。如下列:
#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;
}
輸出結(jié)果:

去掉注釋則編譯出錯(cuò):error C3892: “p1”: 不能給常量賦值(VS 2005);
指針?biāo)赶虻膬?nèi)存地址不能更改,指針的值只能在定義的時(shí)候初始化,其他地方不能更改。
2.常量指針是指向常量的指針。因?yàn)槌A恐羔樦赶虻膶ο笫浅A浚虼诉@個(gè)對象的值是不能夠改變的。定義的格式如下:
【數(shù)據(jù)類型】【const】【*】【常量指針名稱】;
或
【const】【數(shù)據(jù)類型】【*】【常量指針名稱】;
如下例:
#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;
}
輸出結(jié)果:

如果去掉注釋則編譯出錯(cuò):error C3892: “p2”: 不能給常量賦值;
可以看出,常量指針?biāo)赶虻膶ο蟮闹凳遣荒芡ㄟ^常量指針來改變。這一特性常被用于函數(shù)參數(shù)的傳遞。