const在c與c 中的不同地位

2021-07-14 05:49:37 字數 1492 閱讀 4910

我們都知道,const關鍵字是防止某個變數被修改的,即限定這個變數是唯讀的。c/c++中應用const會使程式的健壯性更高一些。

一、const修飾一般變數

在c中,const修飾一般變數是常變數,它具有變數屬性,但同時,它又具有常性不可被修改。

在c++中,加const修飾以後變數就是個常量,不可被修改。

二、const修飾指標變數

先回想一下我們以前在c中寫一段**時傳參的方式有傳值和傳址兩種,但是大家也都知道傳值的方式就是在函式內部做了乙份臨時拷貝,但出了這個函式的作用域臨時變數就會被銷毀。而利用指標傳址的方式又不安全,例如下面這段**:

//傳址方式-----不安全

void print2(int *pa)

2.const修飾乙個變數時:(先看一段錯誤**)

int main()

refn作為n的引用,二者用的是同乙個空間,按理來說,這一塊空間只具有乙個安全屬性,要麼是安全的要麼是不安全的。但是從上邊**來看,n加了const保護不可被修改,但refn不具有安全屬性,即它所代表的空間內容可被修改,這樣就產生了矛盾。因此,要想refn稱為n的引用,這裡必須加上const保護。即:const int& refn = n;

3.const修飾乙個引用時可以對該變數加以保護

int main()

引用加了const保護從而使a的這塊空間不會被改變,增加了其安全屬性。因此我們也可以將引用作為引數(由於不需要拷貝乙份臨時變數,效率會高一些):

//引用傳參

void print3(const int &refa)

//這段**在編譯時只產生警告

int main()

從上邊兩端**看得出,僅僅只有乙個const之差,那麼為什麼會產生這樣的差異呢?!我們接下來分析一下:

通過除錯我們可以發現,d1和d2用的並不是同一塊空間,說明d2根本就不是d1的引用。在這裡其實是有一些變化的,當int型別的d2要作為double型別的d1的引用時,由於兩者型別不同,會根據d1產生乙個int型別的臨時變數(匿名變數),而d2是這個臨時變數的引用。臨時變數一般是不能被修改的,因此在這裡加了const。

因此,以後在變數與該變數的引用之間有型別變化時一定要加const修飾。

const在c和c 中地位不同

先測試c語言的const includeint main 不是指標變數的表示式,const放在型別的前後都沒關係,但是在指標變數中,const的位置就有講究了,此時要分清楚是指標變數的值是唯讀的還是指標所指向的記憶體空間是唯讀的。而且,c語言中,const是個假const includeint ma...

const在c和c 中地位不同

先測試c語言的const includeint main 不是指標變數的表示式,const放在型別的前後都沒關係,但是在指標變數中,const的位置就有講究了,此時要分清楚是指標變數的值是唯讀的還是指標所指向的記憶體空間是唯讀的。而且,c語言中,const是個假const includeint ma...

const在C與C 中的使用

在c語言中const修飾唯讀變數,例如 const int a 0 此時a為唯讀的,不能通過 a 10 這種手段進行值的修改,若想修改a的值,可通過指標來完成,如 int pa int a,pa 10 此時 a 的值變為10 在c 中,若const修飾變數,則該變數變為常量,儲存在符號表中,使用時在...