C語言之區域性變數 全域性變數 變數儲存方式

2022-05-17 21:22:34 字數 2239 閱讀 4683

備註:1、文章中的例子暫時為空,日後希望自己能自己編寫例子賦貼上來。

一、角度分析:

變數作用域 -------> 區域性變數和全域性變數

變數存在的生存期 ---------> 靜態儲存方式和動態儲存方式

二、區域性變數:

區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開函式後再使用這種變數是非法的。

例子:關於區域性變數的作用域還要說明以下幾點:

1)主函式也是乙個函式,它與其他函式是平行關係。主函式中定義的變數也只能在主函式中使用,不能在其他函式中使用。同時,主函式中也不能使用其他函式中定義的變數。

2)形參變數是屬於被調函式的區域性變數,實參變數是屬於主調函式的區域性變數。

3)在不同函式中可以使用相同的變數名,它們代表不同的物件,編譯器分配不同的單元,互不干擾。

4)在復合語句中定義的變數其作用域只能在復合語句範圍內。

例子:三、全域性變數

全域性變數也稱為外部變數,是在函式外語定義的變數。它不屬於哪乙個函式,它屬於乙個源程式檔案(所以只要是在同乙個源程式檔案,那麼就可以利用這個變數進行賦值或其他操作)。其作用域是整個源程式(如何理解這裡的「源程式」)。在函式中使用全域性變數,一般應作全域性變數說明。只有在函式內經過說明的全域性變數才能使用。全域性變數的說明附為:extern。但在乙個函式之前定義的全域性變數,在該函式內使用可不再加以說明。

例如:三、變數的儲存方式

使用者儲存空間可以分為三個部分:

程式區靜態儲存區(在程式執行期間分配固定的訪問空間的方式。

)動態儲存區(在程式執行期間根據需要進行動態的分配儲存空間的方式。

)動態儲存區存放一下資料:

1)函式形式引數;

2)自動變數(未加static宣告的區域性變數);

3)函式呼叫實的現場保護和返回位址;

對以上這些資料,在函式開始呼叫時分配動態存續空間,函式結束時釋放這些空間。

在c語言中,每個變數和函式有兩個屬性:資料型別和資料儲存類別。

1、auto變數:

函式中的區域性變數,如不專門宣告為 static 儲存類別,都是動態地分配儲存空間的,數

據儲存在動態儲存區中。函式中的形參和在函式中定義的變數(包括在復合語句中定義的變

量),都屬此類,在呼叫該函式時系統會給它們分配儲存空間,在函式呼叫結束時就自動釋

放這些儲存空間。這類區域性變數稱為自動變數。自動變數用關鍵字 auto 作儲存類別的宣告。

例如:int f(int a) /*定義 f 函式,a 為引數*/

a 是形參,b,c 是自動變數,對 c 賦初值 3。執行完 f 函式後,自動釋放 a,b,c 所佔

的儲存單元。

關鍵字 auto 可以省略,auto 不寫則隱含定為「自動儲存類別」,屬於動態儲存方式。

2、用static宣告區域性變數

有時希望函式中的區域性變數的值在函式呼叫結束後不消失而保留原值,這時就應該指定區域性變數為「靜態區域性變數」,用關鍵字static進行宣告。

例如:f(int a)

auto b=0;

static c=3;

b=b+1;

c=c+1;

return(a+b+c);

main()

int a=2, i;

for(i=0;i<3;i++)

printf("%d",f(a));

對靜態區域性變數的說明:

1)靜態區域性變數資料靜態儲存類別,在靜態儲存區分配儲存單元。在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放。

2)靜態區域性變數在編譯時賦初始值,即只賦初始值一次;而對自動變數賦初始值是在函式呼叫進行,沒呼叫一次函式重新給一次初值,相當於執行一次賦值語句。

3)如果在定義區域性變數時不賦初始值的話,則對靜態區域性變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值則它的值是乙個不確定值。

例如:3、用extern宣告外部變數

外部變數(即全域性變數)是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。如果外部變數不在檔案的開頭定義,其有效的作用範圍只限與定義處到檔案終了。如果在定義點之前的函式想引用該外部變數,則應該在引用之前用關鍵字extern對該變數做「外部變數宣告」。表示該變數是乙個已經定義的外部變數。有了此宣告,就可以從「宣告」處起,合法地使用該外部變數。

1、全域性變數與區域性變數在記憶體中的區別詳細解析  

hayder

e:[email protected]

2015-4-26

全域性變數 變數 區域性變數和全域性變數

在python中,變數是表示 或指向 特定值的名稱。例如,我們可能想使用名稱a來表示2,為此執行下列 這稱為賦值 assignment 將值2賦給了變數a。也就是變數a與值 或物件 2關聯起來。給變數賦值後,就可以在表示式中使用它。例如 注意 在使用python變數前,必須先給它賦值,而且,變數名稱...

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...