靜態持續變數

2021-08-08 10:42:10 字數 1209 閱讀 1937

c++為靜態儲存持續性提供了3種鏈結性:外部鏈結(可在其他檔案中訪問)、內部鏈結(只能在當前檔案中訪問)和無鏈結(只能在當前函式或**塊中訪問)。

編譯器將分配固定的記憶體塊來儲存所有的靜態變數,這些靜態變數在整個程式執行期間一直存在。如果沒有顯式的初始化靜態變數,編譯器將把它設定為0,在預設情況下,靜態陣列和結構將每個元素或成員的所有位置都設定為0。

如下面例子:

...

int global = 1000; // static duration, external linkage

static int one_file = 50; // static duration, internal linkage

int main()

void funct1(int n)

void funt2()

說明:

(1)靜態變數 global、one_file、count在整個程式執行期間都存在;

(2)count:作用域為區域性,沒有鏈結性。意味著只能在funct1()函式中使用,就像llama一樣。與llama不同的是,即使在funct1()函式沒有執行時,count也留在記憶體中。

(1)靜態持續性、外部鏈結性

如果要在多個檔案中使用外部變數,只需在乙個檔案中包含該變數的定義(單定義規則),但在使用該變數的其他檔案中,都必須使用關鍵字extern宣告他:

定義(定義宣告):他給變數分配儲存空間;

double up;

extern int blem = 10;

宣告(引用宣告):他不給變數分配儲存空間,因為他引用已有的變數;宣告使用關鍵字extern,且不進行初始化,否則宣告為定義導致分配儲存空間。

extern int blem;

(2)靜態持續性、內部鏈結性

可使用外部變數在多檔案程式的不同檔案之間共享資料;可使用鏈結性為內部的靜態變數在同乙個檔案中的多個函式之間共享資料。另外,如果將作用域為整個檔案的變數宣告為靜態的,就不必擔心其名稱與其他檔案中的作用域為整個檔案的變數發生衝突。

(3)靜態持續性、無鏈結性

在**塊中使用static時,將導致區域性變數的儲存持續性為靜態的。這意味著雖然該變數只在改**塊中可用,但他在改**塊不處於活動狀態時仍然存在。因此在兩次函式呼叫之間,靜態區域性變數的值將保持不變。另外,如果初始化了靜態區域性變數,則程式只在啟動時進行一次初始化,以後再呼叫函式時,將不會像自動變數那樣被再次初始化。

靜態持續變數

c 為靜態儲存持續性變數提供了3種鏈結性 外部鏈結性 可在其他檔案中訪問 內部鏈結性 只能在當前檔案中訪問 無鏈結性 別有用心能在當前函式或 中訪問 如果沒有顯示的初始化靜態變數會把它設定為0 要建立鏈結性為外部的靜態持續變數,必須在 塊外面宣告它 要建立鏈結性為內部的 靜態持續變數,必須在 塊外面...

c 靜態持續變數

c 為靜態儲存持續性變數提供了3種鏈結性 外部鏈結性 可在其他檔案中訪問 內部鏈結性 只能在當前檔案中訪問 無鏈結性 別有用心能在當前函式或 中訪問 如果沒有顯示的初始化靜態變數會把它設定為0 要建立鏈結性為外部的靜態持續變數,必須在 塊外面宣告它 要建立鏈結性為內部的 靜態持續變數,必須在 塊外面...

靜態持續變數 內部鏈結性

將static限定符用於作用域為整個檔案的變數時,該變數的鏈結性是內部的即只能在所屬的檔案中使用它。為了區分具有外部鏈結性的外部變數和用static限定的內部鏈結性的變數,以下程式做了示例 include using namespace std double warming 0.1 定義外部變數 i...