- 指針常量是指定義的指針只能在定義的時候初始化,之后不能改變其值,格式如下:【數據類型】【*】【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”: 不能給常量賦值;
可以看出,常量指針所指向的對象的值是不能通過常量指針來改變。這一特性常被用于函數參數的傳遞。