全域性變數與區域性變數定義及儲存小結

2021-06-22 21:45:22 字數 891 閱讀 7763

原文:

從變數值的作用區域上區分,可將變數劃分為全域性變數和區域性變數。全域性變數從定義變數的位置至原始檔的結束均有效。區域性變數作用於在本函式範圍內。如果在同乙個原始檔中,外部變數與區域性變數同名,則在區域性變數的作用範圍內,外部變數不起作用。

從變數值的儲存類別上區分,可將變數劃分為靜態儲存與動態儲存兩種。靜態儲存在整個程式執行期間均具有固定的儲存區間,動態儲存則是在程式執行期間根據需要動態分配儲存空間。在整個程式中,若多次呼叫同乙個函式,則分配給此函式中區域性變數的儲存空間位址可能不同。整個儲存區間型別又可以分為四種:自動變數儲存、靜態區域性變數儲存、暫存器變數儲存、外部變數儲存。

自動變數:函式中的區域性變數一般均為動態儲存。

暫存器變數:一般情況下靜態儲存或動態儲存的變數均存放在記憶體中,但若區域性變數的使用頻率特別頻繁,則可將此變數的值存放在cpu的暫存器中來提高執行效率。此種變數為「暫存器變數」,使用register作宣告。但只有區域性自動變數和形式引數可作為暫存器變數,其他(如全域性變數)不行。區域性靜態變數不能作為暫存器變數——不能把變數既放在靜態儲存區中又放在暫存器中。而且乙個計算機系統中的暫存器數目是確定的,不能無限制的使用暫存器變數。現在的編譯系統一般可自動識別使用頻率較為頻繁的變數,從而自動將其放在暫存器中而無需人工優化。因此一般可忽略使用關鍵字register。

以下為小結:

作用域儲存類別

區域性變數

自動變數(動態區域性變數,本函式內有效,函式呼叫結束後消失)

靜態區域性變數(編譯時分配初值,本函式內有效,函式呼叫結束後值仍保留)

暫存器變數(本函式內有效,函式呼叫後值消失,一般編譯器自動優化)

形式引數可定義為自動變數或暫存器變數

全域性變數

靜態外部變數(僅在本檔案內引用有效)

外部變數(其他檔案可引用,不過需要新增extern宣告或以檔案形式)

全域性變數與區域性變數定義及儲存小結

從變數值的作用區域上區分,可將變數劃分為全域性變數和區域性變數。全域性變數從定義變數的位置至原始檔的結束均有效。區域性變數作用於在本函式範圍內。如果在同乙個原始檔中,外部變數與區域性變數同名,則在區域性變數的作用範圍內,外部變數不起作用。從變數值的儲存類別上區分,可將變數劃分為靜態儲存與動態儲存兩種...

區域性變數與全域性變數

根據c語言的說法,區域性變數 定義在方法內部的變數叫區域性變數 全域性變數 定義在方法外部的變數叫全域性變數。區域性變數和全域性變數的主要區別在於二者的生存週期不同。全域性變數的生存週期 靜態分配記憶體,程式執行期間常駐記憶體,直到程式執行結束。區域性變數的生存週期 動態分配記憶體,位於執行緒堆疊中...

全域性變數與區域性變數

區域性變數 在區域性 塊內定義 作用域在區域性 塊內,生命週期在區域性 塊內,結束時銷毀。include void test int main return 0 輸出 1111111111 全域性變數 在所有 塊外定義 作用域是整個工程,生命週期程式開始至結束。工程test 10 10 原始檔sum...