1.什麼是常量指針
我們可以使用const 來修飾指針,在用const 修飾指針時,我們可以指出,指針自身,指針所指的内容,為常量 const。當const修飾指針時,如果關鍵字const出現在 星号* 左邊 表示的是指針所指的内容為常量,如果關鍵字const 出現在星号* 右邊 表示的是指針本身為常量。如果const出現在星号*兩邊 表示 指針本身 和指針所指的内容都為常量,不能被修改。為了更清楚地說明const是如何修飾指針的,請看以下代碼
#include<iostream>
using namespace std;
//測試 const關鍵字修飾指針
int main(void){
int a = ;//定義了一個整形變量a 并且用3來初始化變量a 這裡a的
//值為3
int b = ;//定義了一個整形變量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 ;
}
2.怎麼使用常量指針?
因為常量定義式通常被放在頭檔案内(以便被不同的源碼引入)
,是以有必要将指針 (而不是指針所指的内容)聲明為const
如 int const b = &a;如果在頭檔案内定義一個常量(不變的量)const必須寫兩次, 如: const int const b = &a ;