1. 程式人生 > >const在C語言和C++中的區別

const在C語言和C++中的區別

一.C語言中的const

    const是C語言中保留的一個關鍵字,它用來限定一個變數是隻讀的,即不可變的。程式中使用const可以在一定程度上提高程式的健壯性,但是程式中使用過多的const,可能在對程式碼的閱讀時增加一定的難度。 “C中的const的意思是‘一個不能被改變的普通變數’,在C中,它總是佔用記憶體,而且它的名字是全域性符。C編譯器不能把const看成一個編譯期間的常量

   (1)用const修飾一般變數

       注意在C語言中,用const修飾的變數必須在宣告時進行初始化(用來修飾函式的形參除外);

 void fun(const int n); 正確

       const char a; 錯誤

       char * const p;  錯誤

       const char *p;正確(注意這種為什麼是正確的),因為這裡const是修飾p指向的變數,而不是指標變數p本身 

       一旦一個變數被const修飾後,在程式中除初始化外對這個變數進行的賦值都是誤的。

 (2)const與指標搭配使用

      首先必須弄清楚兩個基礎概念:指標常量和常量指標

      指標常量:即指標本身的值是不可改變的,而指標指向的變數的值是可以改變的;

      常量指標:即指標指向的變數的值是不可改變的,而指標本身的值是可以改變的;

      可以這樣去理解:因為指標本身也是一個變數,只不過指標存放的是地址而已,而一旦指標變成了常量,即指 針本身的值是不可變的,此時指標只能指向固定的儲存單元;指標一般會指向一個變數,如果該變數成為 一個常量,那麼該變數的值就不能被修改,即常量指標,指標指向的是一個不可變的變數。

總結:

     (1)在C語言中用const去修飾一個變數,表示這個變數是隻讀的,不可通過顯式的呼叫a去修改a的值,並且此時         a仍然是一個變 量,不能等同於常量;

     (2)要注意const在宣告變數時所處的位置,位置不同,在意義上可能會有很大的不同。

        如果const在'*'左邊,則表示指標指向的變數的值不可變;

        如果const在'*'右邊,則表示指標的值是不可變的;

二.C++中的const

    C語言和C++中的const有很大區別。在C語言中用const修飾的變數仍然是一個變數;而在C++中用const修飾過後,就變成常量了。

  1.  C++中,是否為const分配空間要看具體情況.
    如果加上關鍵字extern或者取const變數地址,則編譯器就要為const分配儲存空間.
  2.  C++中定義常量的時候不再採用define,因為define只做簡單的巨集替換,並不提供型別檢查.

  C++編譯器在通常情況下不為常量分配空間,而是將其值存放在符號表內.但當使用extern修飾常量時,則必須立即

為此常量分配空間(與之類似的情況還有取常量的地址等等).只所以必須分配空間,是因為extern表示"使用外部鏈

接",   這表明還會有其他的編譯單元將會使用定址的方法來引用它,因此它現在就必須擁有自己的地址.

ConstCC++中最大的不同是,在C中,const預設具有外部連結,而C++中則是內部連結。所以當你只在定義

const常量的檔案中使用該常量時,c++不給你的const常量分配空間,此時const int c = 0;相當於#define c 0

而在C中,它會給每個const 常量分配記憶體空間