C C 之const關鍵字及其用法詳解

2021-10-12 03:19:14 字數 2116 閱讀 9095

二、const vs define

叮嘟!這裡是小啊嗚的學習課程資料整理。好記性不如爛筆頭,今天也是努力進步的一天。一起加油高階吧!

const 在實際程式設計中用得並不多,const 是 constant 的縮寫,意思是「恆定不變的」!它是定義唯讀變數的關鍵字,或者說const 是定義常變數的關鍵字

說 const 定義的是變數,但又相當於常量;說它定義的是常量,但又有變數的屬性,所以叫常變數。

用 const 定義常變數的方法很簡單,就在通常定義變數時前面加 const 即可,如:

const  int  a =

10;

const 和變數型別 int 可以互換位置,二者是等價的,即上條語句等價於:

int  const  a =

10;

例如上例,它們不都等於 10 嗎?

用 const 定義的變數的值是不允許改變的,即不允許給它重新賦值,即使是賦相同的值也不可以。所以說它定義的是唯讀變數。這也就意味著必須在定義的時候就給它賦初值。

如果定義的時候未初始化,我們知道,對於未初始化的區域性變數,程式在執行的時候會自動把乙個很小的負數存放進去。這樣後面再給它賦初值的話就是「改變它的值」了,即發生語法錯誤。

用 const 修飾的變數,無論是全域性變數還是區域性變數,生存週期都是程式執行的整個過程。全域性變數的生存週期為程式執行的整個過程這個是理所當然的。而使用 const 修飾過的區域性變數就有了靜態特性,它的生存週期也是程式執行的整個過程。我們知道全域性變數是靜態的,靜態的生存週期就是程式執行的整個過程。但是用const修飾過的區域性變數只是有了靜態特性,並沒有說它變成了靜態變數。

我們知道,區域性變數儲存在棧中靜態變數儲存在靜態儲存區中,而*經過 const 修飾過的變數儲存在記憶體中的「唯讀資料段」中 。唯讀資料段中存放著常量唯讀變數等不可修改的量。

前面說過,陣列的長度不能是變數。雖然 const 定義的是唯讀變數,就相當於是定義乙個常量。但是唯讀變數也是變數,所以const 定義的變數仍然不能作為陣列的長度。但是需要注意的是,在 c++ 中可以!c++ 擴充套件了 const 的含義,在 c++ 中用 const 定義的變數也可作為陣列的長度。

很多人在學習 const 的時候都會混淆它與 define 的區別。從功能上說它們確實很像,但它們又有明顯的不同:

define是預編譯指令,而const是普通變數的定義。define定義的巨集是在預處理階段展開的,而const定義的唯讀變數是在編譯執行階段使用的。

const定義的是變數,而define定義的是常量

define定義的巨集在編譯後就不存在了,它不占用記憶體,因為它不是變數,系統只會給變數分配記憶體。

但const定義的常變數本質上仍然是乙個變數,具有變數的基本屬性,有型別、占用儲存單元。

可以說,常變數是有名字的不變數,而常量是沒有名字的。有名字就便於在程式中被引用,所以從使用的角度看,除了不能作為陣列的長度,用const定義的常變數具有巨集的優點,而且使用更方便。所以程式設計時在使用const和define都可以的情況下盡量使用常變數來取代巨集。

const定義的是變數,而巨集定義的是常量,所以const定義的物件有資料型別,而巨集定義的物件沒有資料型別。所以編譯器可以對前者進行型別安全檢查,而對後者只是機械地進行字元替換,沒有型別安全檢查。這樣就很容易出問題,即「邊際問題」或者說是「括號問題」。

ending!

更多課程知識學習記錄隨後再來吧!

就醬,嘎啦!

注:人生在勤,不索何獲。

C C 中 const 關鍵字用法總結

首先,來看看const的基本含義。在 c c 語言中,const關鍵字是一種修飾符。所謂 修飾符 就是在編譯器進行編譯的過程中,給編譯器一些 要求 或 提示 但修飾符本身,並不產生任何實際 就 const 修飾符而言,它用來告訴編譯器,被修飾的這些東西,具有唯讀的特點。在編譯的過程中,一旦我們的 試...

const關鍵字用法

1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...

const關鍵字用法

const修飾符表示該變數的值不能被改變。但得分兩種情況討論 修飾普通變數和修飾指標變數。1.普通常量 const int foo 5 表示foo不能再被賦值 foo 8 錯誤,因為foo是const修飾為不可變常量了 2.修飾指標 const char p test 表示p指向 的記憶體不可改變,...