常量指針定義:常量是形容詞,指針是名詞,以指針為中心的一個偏正結構短語。這樣看,常量指針本質是指針,常量修飾它,表示這個指針乃是一個指向常量的指針。指針指向的對象是常量,那么這個對象不能被更改。常量指針的使用要注意,指針指向的對象不能通過這個指針來修改,可是仍然可以通過原來的聲明修改,也就是說常量指針可以被賦值為變量的地址,之所以叫做常量指針,是限制了通過這個指針修改變量的值。
在C/C++中,常量指針是這樣聲明的:
1)const int *p;
2)int const *p;
例子:
int a = 5;
const int b = 8;
const int *c = &a; // 這是合法的,非法的是對c的使用
*c = 6; // 非法,但可以這樣修改c指向的對象的值:a = 6;
const int *d = &b; // b是常量,d可以指向b,d被賦值為b的地址是合法的
我在這里想重點說明的是,在一個函數的定義里,將一個常量指針賦值給變量指針,然后通過這個變量指針是可以修改常量指針指向的對象的。
但是,編譯器會給出一個警告:warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
p=a;
^
void testp(const int *a,int n)
{
int *p;
p=a;
p[0]=12; //修改了數組a[0]的值,而編譯器只是給了一個警告,所以,警告也要足夠重視。
a[0]=12; //直接修改a,編譯器會報錯,因為定義了const屬性。
}