1. 程式人生 > >[程式設計師面試題]C/C++中static的作用

[程式設計師面試題]C/C++中static的作用

面試題:static有什麼作用?

答:在C語言中,static主要定義全域性靜態變數,定義區域性靜態變數,定義靜態函式

 一、       定義全域性靜態變數 :在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點:

(1)       在全域性資料區內分配記憶體

(2)       如果沒有初始化,其預設值為0

(3)       該變數在本檔案內從定義開始到檔案結束可見

 二、       定義區域性靜態變數:在區域性靜態變數前面加上關鍵字static,該區域性變數便成了靜態區域性變數。靜態區域性變數有以下特點:

(1)       該變數在全域性資料區分配記憶體

(2)       如果不顯示初始化,那麼將被隱式初始化為0

(3)       它始終駐留在全域性資料區,直到程式執行結束

(4)       其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束。

  三、       定義靜態函式:在函式的返回型別加上static關鍵字,函式即被定義成靜態函式。靜態函式有以下特點:

(1)       靜態函式只能在本原始檔中使用

(2)       在檔案作用域中宣告的inline函式預設為static

                說明:靜態函式只是一個普通的全域性函式,只不過受static限制,他只能在檔案坐在的編譯單位內使用,不能呢個在其他編譯單位內使用。

在C++語言中新增了兩種作用:定義靜態資料成員或靜態函式成員

(1)       定義靜態資料成員。靜態資料成員有如下特點:

(1)       記憶體分配:在程式的全域性資料區分配

(2)       初始化和定義:靜態資料成員定義時要分配空間,所以不能在類宣告中定義

(3)       靜態成員函式。靜態成員函式與類相聯絡,不與類的物件相聯絡。靜態成員函式不能訪問非靜態資料成員。原因很簡單,非靜態資料成員屬於特定的類例項,主要用於對靜態資料成員的操作。

(4)       靜態成員函式和靜態資料成員都沒有this指標。