C 探幽系列 指標 引用 const(二)

2021-09-28 15:10:50 字數 2093 閱讀 3319

在c++中,當我們定義需要定義一種值不允許修改的變數時,就用到了const關鍵字,應用場景如表示緩衝區大小或者表示乙個常量。

const修飾的物件具有以下特點。

1. const修飾的常量不可修改;

const

int a=10;

//定義const常量

a=11

;//錯誤:不允許修改

2. const物件一旦建立必須初始化;

3. 對於const物件只能執行不改變其內容的操作;

const

int a=40;

const

int b=a;

//正確:用a去初始化不會改變其值。

4. const物件僅在檔案內有效,當多個檔案(cpp檔案)共享使用常量時,用到extern關鍵字;

對於const變數,在定義和宣告時都新增extern關鍵字(定義一次,多處可用)

file.cpp定義並初始化乙個常量,該常量能被其他檔案訪問:

extern

const

double pi =

3.14

;//定義常量pi

file.h標頭檔案進行宣告

extern

const

double pi;//後續只要新增#include的cpp檔案都可使用pi

1.把引用繫結到const物件上稱為常量引用。不能通過常量引用修改所繫結的物件。

2.引用與繫結的型別要一致,但有兩個特例:

(1)常量引用可繫結到非常量物件

int i=1;

const

int&r=i;

//正確:允許常量引用繫結非常量物件

(2)非常量引用不能繫結到常量物件

const

int c=

1024

;int

&r=c;

//錯誤:非常量引用不能繫結常量物件

1.常量物件只能用常量指標(前後型別一致)

const

double pi=

3.14

;double

*ptr=pi;

//錯誤:ptr是乙個普通指標

const

double

*ptr1=pi;

//正確

2.常量指標必須初始化,且初始化完成不能在改變指向,但可以修改值

為了便於理解,舉例如下:

int a=0;

int*

const p=

&a;//常量指標p將一直指向a,不能修改其指向,但a的值可以修改

const

double pi=

3.14

;const

double

*const ptr=

π//ptr自己的指向以及pi的值都不允許修改

如何讀懂一條包含多個符號語句?例如const double *const ptr=π中的ptr怎麼理解?

方法是從右向左讀:

1.從右向左,離變數名ptr最近的符號是const,因此ptr首先是乙個常量物件,該物件型別由其餘部分決定;

2.繼續向右讀,下乙個符號是*指標,表明ptr是乙個常量指標;

3.下乙個符號是double,表明ptr是乙個指向雙精度浮點型的常量指標;

4.最後是const,因此ptr是乙個常量指標,它指向的是雙精度浮點型常量,即ptr是乙個指向雙精度浮點型常量的常量指標

c 引用 指標 const

1 const定義常量 const int valuename value 2 const與指標 指標常量 int const p 指標的位址不允許修改,值可以修改 常量指標 const int p 值不能修改,位址可以修改 指向常量的指標常量 const int const p 3 const與函...

引用,const引用,指標

引用,const引用,指標 一 引用 1 定義 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。2 宣告方法 型別 引用變數名 已定義過的變數名。3 特點 l 乙個變數可以取多個別名 但引用與其所代表的變數共享同一記憶體空間 模擬 人的別名 l 引用必須初始化,且必須宣告引用的型別...

指標和引用,const 指標和const 引用

指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...