首頁 >後端開發 >C++ >C 中的函數級靜態變數何時以及如何分配和初始化?

C 中的函數級靜態變數何時以及如何分配和初始化?

Patricia Arquette
Patricia Arquette原創
2024-11-18 02:12:02246瀏覽

When and How Are Function-Level Static Variables in C   Allocated and Initialized?

函數級靜態變數的分配與初始化

C 中函數級靜態變數是整個生命週期中持續存在的資料類型的程序。與全域變數不同,它們不是在全域範圍內聲明的,而是在函數範圍內聲明的。這引發了關於何時分配和初始化這些變數的疑問。

與在程式開始時分配和初始化的全域宣告變數相比,函數級靜態變數在第一次呼叫時分配和初始化到定義它們的函數。這在提供的範例程式碼中很明顯:

void doSomething() {
  static bool globalish = true;
}

靜態變數 globalish 在第一次呼叫函數 doSomething 時初始化。在此之前,其值是未定義的。這個結果透過一個測試程序得到了證實,該程式列印了與不同範圍內實例化的物件的創建和銷毀相關的事件。

這種行為歸因於靜態變數儲存在記憶體的靜態區域中在對相同函數的所有呼叫之間共享。因此,除非在函數內明確修改,否則初始值在呼叫之間保持不變。

以上是C 中的函數級靜態變數何時以及如何分配和初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn