在內部定義的變數就是區域性變數
只有執行到定義變數的這個語句,系統才會給這個變數分配儲存空間
當離開, 這個非static區域性變數自動釋放
區域性變數的作用域在當前的,離開此,無法使用
不同的中,變數名字可以一樣,遵循就近原則
在內部定義的變數就是區域性變數
static區域性變數,是在編譯階段就已經分配空間,函式沒有呼叫前,它已經存在
當離開,static區域性變數不會釋放,只有程式結束,static變數才會自動釋放
區域性變數的作用域在當前的,離開此,無法使用
如果static區域性變數不初始化,它的值預設為0。
static區域性變數初始化語句,只會執行一次,但是可以賦值多次。
不同的中,變數名字可以一樣
static int i; static變數沒有放在棧裡,放在data區。
static變數只能用常量初始化,變數不可以。
普通區域性變數和static區域性變數的區別:
記憶體分配和釋放:
普通區域性變數只有執行到定義變數的語句才分配空間
static區域性變數在編譯階段,變數的空間已經分配
普通區域性變數離開作用域{},自動釋放
static區域性變數只有在整個程式結束才自動釋放
初始化 :
普通區域性變數不初始化的時候,值為隨機數
static區域性變數不初始化的時候,值為0
static區域性變數初始化語句只有第一次執行時候有效
static區域性變數只能用常量初始化
在{} 外面(函式外面)定義的變數為全域性變數
只有定義了全域性變數,任何地方都能使用此變數
如果使用變數時,在前面找不到此全域性變數的定義,需要宣告後才能使用
普通全域性變數不初始化的時候,預設賦值為0
extern宣告只是針對全域性變數,不是針對區域性變數
普通全域性變數只能定義一次,可以宣告多次
宣告extern int a; 定義 int a = 10;宣告不同於定義
普通全域性變數在編譯階段已經分配空間(函式沒有執行前),只有在整個程式結束,才自動釋放。
不同檔案,普通全域性變數只能定義一次,可以宣告多次
分檔案程式設計,在.h檔案中放普通全域性變數的宣告,不要放定義,否則容易出現重複定義錯誤,編譯不通過。在.c檔案中放定義。
所以在.h檔案中出現大量的extern宣告
全域性變數的建議:定義乙個全域性變數,建議初始化。如果宣告乙個全域性變數,建議加extern
static全域性變數和普通全域性變數的區別即作用域不一樣(檔案作用域)
extern關鍵字只適用於普通全域性變數
分檔案程式設計,普通全域性變數只能在乙個檔案中定義一次
普通全域性變數所有檔案都能使用,前提是需要宣告
靜態static全域性變數只能本檔案使用,別的檔案不能使用
不同檔案只能出現乙個普通全域性變數的定義
乙個檔案只能有乙個static全域性變數的定義,不過不同檔案間的static全域性變數,就算名字相同,也是沒有關係
的兩個變數。
static全域性變數更安全。
不初始化時候值為0
所有檔案只能有一次普通函式的定義
每乙個檔案可以有乙個static函式的定義
普通函式所有檔案都能呼叫,前提是使用前已經宣告
但是static函式只能在定義所在的檔案中使用
C語言中變數的作用域和生命週期
譚浩強書 從儲存模型可以看到,譚浩強和錢能的模型有一定的對應關係 靜態儲存區 全域性資料區 動態儲存區 棧 stack 變數的型別 1.區域性變數和全域性變數 區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開該函式後再使用這種變數是非法的。全域性變數也稱為外部變...
C語言中變數的作用域和生命週期
譚浩強書 從儲存模型可以看到,譚浩強和錢能的模型有一定的對應關係 靜態儲存區 全域性資料區 動態儲存區 棧 stack 變數的型別 1.區域性變數和全域性變數 區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開該函式後再使用這種變數是非法的。全域性變數也稱為外部變...
C語言變數作用域和生命週期
1 c語言不支援對形參變數的引用,也就是說,形參變數的作用域僅在於函式定義域內 2 有的c語言編譯器支援對變數不在函式開始的時候定義 3 全域性變數可以作為函式間通訊的乙個工具 4 全域性變數可以通過減少函式形引數,較少記憶體空間,較少傳遞資料的時間消耗 5 動態變數的生命週期和其所在的汗水一樣 6...