全域性變數和靜態變數

2021-08-07 12:17:24 字數 873 閱讀 9877

如果定義乙個全域性變數,未被初始化,則變數被預設初始化,但區域性變數未被初始化,則該值未定義。(內建型別和陣列一樣)

定義全域性靜態變數:在全域性變數前加個關鍵字static,該全域性變數變為全域性靜態變數。全域性靜態變數有以下特點:

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

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

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

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

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

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

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

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

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

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

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

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

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

一, 定義靜態資料成員。靜態資料成員有如下特點:

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

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

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

(1) 靜態成員函式沒有this指標。

全域性變數和靜態變數

變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數 按儲存區域分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區 按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...

全域性變數和靜態變數區別

儲存的地方是一樣的,不同之處在於它們的作用域不同 全域性變數基本上在程式的任何地方都能被看到 而靜態區域性變數只能在其指定的範圍內被使用 比如 int i 全域性變數 class c void main 全域性變數具有外部連線性,即同一工程中其它檔案中的也可引用。而靜態變數不具有外部連線性,即同一工...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...