C語言變數作用域 static關鍵字

2021-10-09 13:23:44 字數 1344 閱讀 7911

全域性變數

1)在所有函式外部定義的變數都是全域性變數,作用域在整個程式都有效;所以全域性變數一般都定義在標頭檔案中;

2)全域性變數有預設值,即系統會自動對其初始化:

整型:0

浮點型:0.0

字元型:』\0』 空字元

指標:null

3)全域性變數儲存在記憶體的全域性區,占用靜態的儲存單元,所以其作用域是整個程式。

區域性變數

1)函式內部定義的變數是區域性變數,作用域僅限於函式內部;函式形參也屬於函式的區域性變數;

2)區域性變數沒有預設值,系統不會對其初始化,所以必須對區域性變數初始化後才能使用;

3)區域性變數儲存在棧中,函式被呼叫時才動態的為變數在函式棧空間中分配儲存單元,所以其作用域僅限於函式內部;

總結:a、(全域性變數)函式之外,有預設值,整個程式都可以訪問,要麼定義在函式之外要麼在標頭檔案中;

b、(區域性變數)函式內部、函式形參、函式內部的語句塊,沒預設值必須初始化值,只能在定義區域性變數的函式內部或語句塊中訪問;

1)區域性變數使用static修飾

a、區域性變數被static修飾後,稱為區域性變數;

b、靜態區域性變數也有預設值;

c、靜態區域性變數儲存在記憶體的靜態儲存區(全域性性質),只會被初始化一次;

2)全域性變數使用static修飾

a、全域性變數被static修飾後,稱為靜態全域性變數;

b、全域性變數對整個工程可見,其他檔案可以使用extern外部宣告直接使用,或者先將全域性變數定義在標頭檔案,其他檔案通過引入標頭檔案直接使用,也就是說其他檔案不能再定義乙個與之同名的全域性變數了;但是靜態變數是僅對當前檔案可見,其他檔案不可訪問,所以其他檔案可以定義與之同名的變數;所以一般是定義不需要與其他檔案共享的全域性變數時,使用靜態全域性變數;

3、函式使用static修飾

1)函式的使用方式和全域性變數類似,函式被static修飾稱為靜態函式;

2)函式可以通過另乙個檔案通過extern引用直接使用,或者先將函式定義在標頭檔案中,再直接引入標頭檔案後直接使用,也就是說其他檔案不能再定義乙個與之同名的函式;靜態函式僅對但前檔案可見,其他檔案不可訪問,所以其他檔案可以定義與之同名的函式;

總結:1> 靜態區域性變數:有預設值,只會初始化一次。

2> 靜態全域性變數:只能在其所處的檔案中被使用。

3> 靜態函式:只能在其所處的檔案中被使用。

4> 全域性變數:整個程式可訪問。a、使用extern關鍵字、b、先定義在標頭檔案中,再引入標頭檔案。

5> 函式:整個程式可訪問。a、使用extern關鍵字、b、先定義在標頭檔案中,再引入標頭檔案。

C語言變數作用域

作用域描述程式中可訪問識別符號的區域。乙個c變數的作用域可以是塊作用域,函式作用域,函式原型作用域或檔案作用域。int fun int a q作用域結束 在這個例子中,q的作用域只在內層塊,只有內層塊中的 才能訪問q。在c99中,把塊的概念擴充套件到for迴圈,while迴圈,do while迴圈和...

C語言 static變數及其作用

在 c 語言中,static 關鍵字不僅可以用來修飾變數,還可以用來修飾函式。在使用 static 關鍵字修飾變數時,我們稱此變數為靜態變數。靜態變數的儲存方式與全域性變數一樣,都是靜態儲存方式。但這裡需要特別說明的是,靜態變數屬於靜態儲存方式,屬於靜態儲存方式的變數卻不一定就是靜態變數。例如,全域...

C語言變數的作用域

什麼叫做 塊呢?塊就是我們在復合語句中的就要 塊,在 塊中的auto 自動變數 是無法超出這個範圍的,一旦超出了這個範圍的話就會消失它的作用,比如 void main 這個main函式的花括號就是乙個 塊,而我們要在它的裡面再定義乙個 塊 這個就是乙個 塊,這是個內部的 塊,雖然是寫在main函式裡...