1. 程式人生 > >變數分類及其特點

變數分類及其特點

普通全域性變數

   1.生命週期:程式開始執行是建立,程式結束時才銷燬

   2.作用域:定義開始直到本原始檔結束,(不安全)普通全域性變數的作用域是整個源程式,當一個源程式由多個原檔案組成             時,普通的全域性變數在各個原始檔中都是有效的。如果想在別的檔案中訪問可以加上extern宣告                      https://www.cnblogs.com/mch0dm1n/p/5727667.html

(extern知識??)

   3.預設值:為0

   4.連線屬性:外部

   5.記憶體區域:全域性區

靜態全域性變數

     static全域性變數初始化語句只執行一次一次

   1.生命週期:程式開始執行是建立,程式結束時才銷燬

   2.作用域:定義開始直到本檔案結束,(不安全)而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在         同一源程式的其它原始檔中不能使用它。靜態全域性變數就是用來解決重名問題的

   3.預設值:為0

   4.連線屬性:內部

   5.記憶體區域:全域性區

普通區域性變數

   1.生命週期:進入函式時建立,函式結束時銷燬

   2.作用域:本函式內有效

   3.預設值:隨機值

   4.連線屬性:無

   5.記憶體區域:棧

靜態區域性變數

   1.生命週期:進入函式時建立,函式結束時銷燬

   2.作用域:不死  ??

   3.預設值:為0

   4.連線屬性:無

   5.記憶體區域:全域性區

動態記憶體

   1.生命週期:通過malloc函式建立,free釋放

   2.作用域:能獲得就能用

   3.預設值:隨機

   4.連線屬性:無

   5.記憶體區域:堆

普通函式

   1.生命週期:

   2.作用域:對於可在當前原始檔以外使用的函式應該在一個頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案。

   3.預設值:無

   4.連線屬性:無

   5.記憶體區域:程式碼段

靜態函式

   1.生命週期:

   2.作用域:只在當前原始檔中使用的函式

   3.預設值:無

   4.連線屬性:無

   5.記憶體區域:程式碼段

static函式與普通函式最主要區別是static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝程式的區域性變數存在於(棧)中

 

對於一個完整的程式:記憶體分佈有如下幾個區、棧區、堆區、全域性區、常量區、程式碼區。