C語言中變數的作用域和生命週期

2021-08-15 10:59:32 字數 3480 閱讀 8288

在內部定義的變數就是區域性變數

只有執行到定義變數的這個語句,系統才會給這個變數分配儲存空間

當離開, 這個非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...