C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 > 指針 閱讀:15,787

const關鍵字及其作用(用法),C語言const詳解

const 在實際編程中用得并不多,const 是 constant 的縮寫,意思是“恒定不變的”!它是定義只讀變量的關鍵字,或者說 const 是定義常變量的關鍵字。

說 const 定義的是變量,但又相當于常量;說它定義的是常量,但又有變量的屬性,所以叫常變量。用 const 定義常變量的方法很簡單,就在通常定義變量時前面加 const 即可,如:
const  int  a = 10;
const 和變量類型 int 可以互換位置,二者是等價的,即上條語句等價于:
int  const  a = 10;
那么用 const 修飾后和未修飾前有什么區別呢?它們不都等于 10 嗎?

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

如果定義的時候未初始化,我們知道,對于未初始化的局部變量,程序在執行的時候會自動把一個很小的負數存放進去。這樣后面再給它賦初值的話就是“改變它的值”了,即發生語法錯誤。

用 const 修飾的變量,無論是全局變量還是局部變量,生存周期都是程序運行的整個過程。全局變量的生存周期為程序運行的整個過程這個是理所當然的。而使用 const 修飾過的局部變量就有了靜態特性,它的生存周期也是程序運行的整個過程。我們知道全局變量是靜態的,靜態的生存周期就是程序運行的整個過程。但是用const修飾過的局部變量只是有了靜態特性,并沒有說它變成了靜態變量。

我們知道,局部變量存儲在棧中,靜態變量存儲在靜態存儲區中,而經過 const 修飾過的變量存儲在內存中的“只讀數據段”中。只讀數據段中存放著常量和只讀變量等不可修改的量。

前面說過,數組的長度不能是變量。雖然 const 定義的是只讀變量,就相當于是定義一個常量。但是只讀變量也是變量,所以 const 定義的變量仍然不能作為數組的長度。但是需要注意的是,在 C++ 中可以!C++ 擴展了 const 的含義,在 C++ 中用 const 定義的變量也可作為數組的長度。

const VS define

很多人在學習 const 的時候都會混淆它與 define 的區別。從功能上說它們確實很像,但它們又有明顯的不同:
  1. define是預編譯指令,而const是普通變量的定義。define定義的宏是在預處理階段展開的,而const定義的只讀變量是在編譯運行階段使用的。
  2. const定義的是變量,而define定義的是常量。define定義的宏在編譯后就不存在了,它不占用內存,因為它不是變量,系統只會給變量分配內存。但const定義的常變量本質上仍然是一個變量,具有變量的基本屬性,有類型、占用存儲單元。可以說,常變量是有名字的不變量,而常量是沒有名字的。有名字就便于在程序中被引用,所以從使用的角度看,除了不能作為數組的長度,用const定義的常變量具有宏的優點,而且使用更方便。所以編程時在使用const和define都可以的情況下盡量使用常變量來取代宏。
  3. const定義的是變量,而宏定義的是常量,所以const定義的對象有數據類型,而宏定義的對象沒有數據類型。所以編譯器可以對前者進行類型安全檢查,而對后者只是機械地進行字符替換,沒有類型安全檢查。這樣就很容易出問題,即“邊際問題”或者說是“括號問題”。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo