1.什麼是常量指針
我們可以使用const 來修飾指針,在用const 修飾指針時,我們可以指出,指針自身,指針所指的內容,爲常量 const。當const修飾指針時,如果關鍵字const出現在 星號* 左邊 表示的是指針所指的內容爲常量,如果關鍵字const 出現在星號* 右邊 表示的是指針本身爲常量。如果const出現在星號*兩邊 表示 指針本身 和指針所指的內容都爲常量,不能被修改。爲了更清楚地說明const是如何修飾指針的,請看以下代碼
#include<iostream>
using namespace std;
//測試 const關鍵字修飾指針
int main(void){
int a = 3;//定義了一個整形變量a 並且用3來初始化變量a 這裏a的
//值爲3
int b = 4;//定義了一個整形變量b ,用4來初始化變量 b 這裏b
//的值爲4
int *pa = &a;//定義了一個指向整形的指針變量pa ,pa指向a 的
//地址 此時pa的值爲 a的地址&a ,*pa 的值爲3
//此時因爲星號*前面和後面都沒有const修飾,所以
//不管是指針變量pa還是指針pa所指物都可以發生改
//變
//指針本身發生改變
pa = &b;//此時指針變量pa的指向發生了改變,把變量b的地址賦值給
//了pa 是合法的,此時pa 的值爲b的地址&b,*pa 的值爲
//變量b的值4
//指針所指的內容發生改變
*pa = a;//此時指針變量pa的指向沒有發生改變,還是指向上一指令b
//的地址,但是指針所指的內容已經由變量b 變爲變量a 此
//時*pa的值爲變量a的值3
//const 修飾指針本身 指針本身不能發生改變,指針所指的內容可以改變
int* const pc = &a;//定義了一個指向整形變量的常指針pc,並且
//把變量a的地址&a 賦給 pc 此時 pc 指
//向變量a的地址&a,*pc 的值爲變量a 等
//於3
//pc = &b; //編譯器報錯,表達式必須是可修改的左值,因爲
//pc 爲常指針,指針本身不能發生改變
*pc = b; //可以通過,指針pc 所指的內容是可變的,此時把
//變量b 賦給 pc所指的內容,*pc 此時由a的值3
//變爲b的值4
//const 修飾指針所指的內容,把const放在* 左邊,此時指針本身pd可以發生改變,指針所指物*pd不能發生改變
const int * pd = &a;//定義另一個指針變量pd ,pd所指的內容*pd爲常量,並且把變量a的地址&a 賦給pd ,此時指針變量pd 的值爲變量a的地址&a
//*pd = b;//編譯器報錯 “不能給常量賦值”此時 指針變量pd所指的內容爲常量,不能發生改變
//const 既修飾指針本身 又修飾指針所指的內容
const int* const pe = &a;//此時定義了一個指向常量型的指針常量 pe ,並且把變量a的地址賦&a 賦值給pe,此時無論指針pe 還是指針pe所指的內容都不能發生改變
//pe = &b; //編譯器報錯 “表達式必須爲可修改的左值”
// *pe = b;// 編譯器報錯 “表達式必須爲可修改的左值”
cout << *pa <<endl;
return 0;
}
2.怎麼使用常量指針?
因爲常量定義式通常被放在頭文件內(以便被不同的源碼引入)
,因此有必要將指針 (而不是指針所指的內容)聲明爲const
如 int const b = &a;如果在頭文件內定義一個常量(不變的量)const必須寫兩次, 如: const int const b = &a ;