c++中的變數

firedragonpzy發表於2012-08-09
[i][b]本文為firedragonpzy原創,轉載務必在明顯處註明:
轉載自【Softeware MyZone】原文連結: http://www.firedragonpzy.com.cn/index.php/archives/935[/b][/i]

今天研究了下變數,現在分享一下:
變數是有屬性的,包括:變數的資料類別、變數的儲存類別,其中,我們根據變數的儲存類別又可以得知變數的作用域和儲存期兩個屬性。
關於類別就不贅述了,但有可能會在typedef一文中解釋下。下面重點來看變數的儲存類別。
首先,看一下儲存類別的定義:是資料在記憶體中儲存的方法。儲存方法分為靜態儲存和動態儲存。具體包含四種:自動的(auto),靜態的(static),暫存器的(register)和外部的(extern)。
其中靜態儲存和動態儲存決定了變數的儲存器是靜態儲存期還是動態儲存期。
對於動態儲存變數,當程式執行到該變數時才為其分配儲存空間,當程式執行到該變數所在作用域的結束處時自動收回為其分配的儲存空間,因此它的儲存期為所在作用域的時間。這些變數一般是1)函式形式引數2)函式中的自動變數
對於靜態儲存變數,在程式開始就執行就為其分配儲存空間,直到程式結束時,才收回變數的儲存空間,其生命週期為整個程式執行的過程。這些變數一般是全域性的或者靜態的
接下來,詳細介紹一下四種儲存方法;
1 、自動的(auto)
函式中的區域性變數,如果不用static加以宣告,編譯系統對它們是動態分配儲存空間的。
2、靜態的(static)
有兩種,全域性的和靜態的,即在程式執行的過程中始終是佔用一個儲存空間。
3、暫存器的(register)
動態分配方式,編譯器不為暫存器型別的變數分配記憶體空間,而是直接使用cpu的暫存器。以便提高對這類變數的存取速度。主要用於不需要長期儲存的變數。
4、外部的(extern)
只能用來宣告已經定義的全域性(外部)變數,
有兩種情況下需要使用全域性(外部)變數,
(1)在同一源程式檔案中,當在全域性的定義之前使用了該變數,在使用前要對該變數進行外部型別變數宣告。
(2)當程式有多個檔案組成時,若在一個原始檔中要引用在另一個原始檔中定義的全域性變數,在引用前必須對所引用的變數進行外部宣告。
如果在某檔案中定義的全域性變數不想被其他檔案所呼叫,則必須將該變數宣告為靜態全域性變數,也就是說,靜態全域性變數只能供所在的檔案使用。

相關文章