天天看點

C/C++面試題:static(靜态)變量的作用

C /:

 static 的作用:          (1)在函數體内,靜态變量具有“記憶”功能,即一個被聲明為靜态的變量在這一函數被調用的過程中其值維持不變

         (2)在函數體外(但在子產品内),它的作用域範圍有限制,即如果一個變量被聲明為靜态的,那麼該變量可以被子產品内的所有函數通路,但不能被子產品外其他函數通路。如果一個函數被聲明為靜态的,那麼該函數與普通函數作用域不同,其作用域僅在本檔案中,它隻可被這一子產品内的其他函數調用,也就是說,這個函數被限制在聲明它的子產品的本地範圍内使用。

         (3)内部函數應該在目前源檔案中說明和定義,對于可在目前源檔案以外使用的函數,應該在一個頭檔案中說明,使用這些函數的源檔案要包含這個頭檔案。

 static 全局變量和普通的全局變量的差別:          static 全局變量隻初始化一次(防止在其他檔案單元中被引用);

  static 局部變量和普通的 局部 變量的差別:          static 局部變量隻被初始化一次,下一次的運算依據是上一次結果值;

 static 函數與普通函數的差別:

         作用域不一樣,static 函數隻在一個源檔案中有效,不能被其他源檔案使用;

C++/:          在類内部成員的聲明前加上 static,即該成員就是類内部的靜态資料成員,特點?

              (1)靜态資料成員是類成員;(無論類的對象被定義了多少個,靜态資料成員在程式中也隻有一份複制品)

              (2)靜态資料成員存儲在全局資料區,屬于本類的所有對象共享,不屬于特定的類對象;

              (3)static 成員變量的初始化在類外,不能加上 private 。

 引申1:為什麼 static 變量隻初始化一次?

         對于所有的變量都隻初始化一次,而由于靜态變量具有 “記憶” 功能,初始化後,一直都沒有被銷毀,都會儲存在記憶體區域中,是以不會再次初始化。

         存放在靜态資料區的變量的生命周期一般與整個源程式 “同生死”、“共存亡”,是以它隻初始化一次。

 引申2:在頭檔案中定義靜态變量,是否可行?為什麼?

         不可行,如果在頭檔案中定義靜态變量,會造成資源浪費的問題,同時也可能引起程式的錯誤。因為如果在使用了該頭檔案的每個 C 語言檔案中定義靜态變量,在每個頭檔案中都會單獨存在一個靜态變量,進而會引起空間浪費或者程式出錯。

繼續閱讀