C 的const限定符

2021-10-08 13:19:05 字數 1457 閱讀 9291

const限定符總是讓人很頭疼,下面講解一下幾個比較容易混淆的概念:

對常量的引用(常量引用):

一般情況下,引用的型別要與其所引用的物件的型別一致,其中的例外情況就是,當初始化常量引用時,允許用任意表示式作為初始值,只要改表示式能轉換成引用的型別即可。

const

int i =1;

const

int&ri = i;

int i =42;

const

int&r1 = i;

const

int&r2 =

42;

指向常量的指標

和引用類似,一般情況下,指標的型別應該與其指向的物件的型別一致,但是允許乙個指向常量的指標指向乙個非常量物件。

const

int i =4;

const

int*cptr =

&i;int a =1;

cptr =

&a;

常量指標

由於指標本身就是乙個物件,因此可以定義乙個指標為常量指標,必須被初始化。當常量指標指向乙個物件時,那麼這個指標永遠只能指向這個物件,但是被指向的物件的值能否改變,取決於被指向的物件本身是否是乙個常量。

int i =1;

int*

const cp =

&i;//cp永遠指向i,

i =2

;//由於i是非常量,其值可以改變

const

int c =2;

const

int*

const p =

&c;//p是乙個指向常量的常量指標

c =1

;//錯誤,c為常量,其值不能被改變

p =&i;

//錯誤,p是乙個常量的指標,其指向不能改變

頂層const與底層const

頂層const表示指標本身就是乙個常量,而底層const表示指標所指的物件是乙個常量。

int i =0;

int*

const pi =

&i;//pi的值不能被改變,pi為頂層const

const

int ci =42;

//ci是乙個int型別的常量,值不能被改變,為頂層const

const

int*p2 =

&ci;

//p2是乙個指向常量的指標,p2的值可以改變,所以p2為底層const

const

int*

const p3 = p2;

//靠右的const是頂層const,靠左的const是底層const

const

int&r = ci;

//用於宣告引用的const都是底層const

C 的const限定符

一 const常量 const int a 123 編譯時初始化 const int a get size 執行時初始化 a 111 錯誤,a是常量物件,不能改變了 const int b 錯誤 二 對const和const引用的初始化 初始化常量或常量引用時允許用任意表示式作為初始值,只要該表示式...

C 之const限定符

const的特點 用const加以限定的變數,無法改變。由於const物件定義之後就無法改變,所以必須對其進行初始化。const物件的常量特徵僅在嘗試改變它的時候表現出來,其他時候和變數無異。const初始化 const int bufsize 512 bufsize無法再改變const物件通常只在...

關於const 限定符

很多引用自c primer一書 比如有時候需要將乙個文字中的資料複製到另外乙個文字。我們需要使用緩衝區,緩衝區的大寫我們可以自己來決定比如1024個位元組,這是乙個常量,我們使用bufsize 1024.但是bufersize物件本身是乙個變數。所以我們可以引入const限定符,它將乙個物件轉化為常...