static變數與普通變數的異同

2022-05-04 22:57:06 字數 683 閱讀 2766

1、static區域性變數與普通區域性變數的異同

相同點:都是區域性變數,在函式內部定義,僅能被該模組內部的語句所訪問。

不同點:

1)記憶體分配與釋放:

static修飾的區域性變數在記憶體中存放在靜態儲存區,static修飾的區域性變數只有在整個程式結束的時候才會自動釋放。若下次呼叫該區域性變數所在的函式時,不需要對它重新宣告,且會保留上一次呼叫存入的值。

普通區域性變數存放在堆疊區,動態分配,其離開作用域『{}』後,就會自動銷毀,釋放記憶體空間,無法再次使用此變數。

static區域性變數在編譯階段,函式還未執行的時候,就已經分配了變數空間。

普通區域性變數只有在執行到定義變數的語句時,才會分配記憶體空間。

2)初始化

static區域性變數不初始化時,預設值為0;

普通區域性變數不初始化時,預設值為隨機值。

2:static全域性變數與普通全域性變數的異同

兩者在儲存方式上都是靜態儲存,這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。

普通變數,static變數

普通變數,static變數雖然都是變數,但是他們有很大的區別,下面從儲存區域,初始化值,作用域,生命週期來辨析他們 在同乙個檔案下 測試使用,無意義 void add int a,int b intmain 結果 sum 6356940 tmp的初始化值 53 sum 1944111648通過結果可...

static修飾的變數和函式與普通變數函式的區別

全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有...

final變數和普通變數的區別

public class test public static void main string args string a handao final string b han string c han string d b dao string e c dao system.out.println...