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

2021-08-04 20:44:52 字數 1320 閱讀 3485

在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的。同樣,在復合語句中定義的變數只在本復合語句範圍內有效。這稱為區域性變數(local variable)。如:

對區域性變數的一些說明:

1) 主函式main中定義的變數(m, n)也只在主函式中有效,不會因為在主函式中定義而在整個檔案或程式中有效。主函式也不能使用其他函式中定義的變數。

2) 不同函式中可以使用同名的變數,它們代表不同的物件,互不干擾。例如,在f1函式中定義了變數b和c,倘若在f2函式中也定義變數b和c,它們在記憶體中佔不同的單元,不會混淆。

3) 可以在乙個函式內的復合語句中定義變數,這些變數只在本復合語句中有效,這種復合語句也稱為分程式或程式塊。

4) 形式引數也是區域性變數。例如f1函式中的形參a也只在f1函式中有效。其他函式不能呼叫。

5) 在函式宣告中出現的引數名,其作用範圍只在本行的括號內。實際上,編譯系統對函式宣告中的變數名是忽略的,即使在呼叫函式時也沒有為它們分配儲存單元。例如:

int max(int a, int b);//函式宣告中出現a、b

int max(int x, int y) //函式定義,形參是x、y

{ cout《編譯時認為max函式體中的a和b未經定義。

前面已介紹,程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。在函式內定義的變數是區域性變數,而在函式之外定義的變數是外部變數,稱為全域性變數(global variable,也稱全程變數)。全域性變數的有效範圍為從定義變數的位置開始到本原始檔結束。如:

p、q、c1、c2都是全域性變數,但它們的作用範圍不同,在main函式和f2函式中可以使用全域性變數p、q、c1、c2,但在函式f1中只能使用全域性變數p、q,而不能使用c1和c2。

在乙個函式中既可以使用本函式中的區域性變數,又可以使用有效的全域性變數。

對全域性變數的一些說明:

1) 設全域性變數的作用是增加函式間資料聯絡的渠道。

2) 建議不在必要時不要使用全域性變數,因為:

3) 如果在同乙個原始檔中,全域性變數與區域性變數同名,則在區域性變數的作用範圍內,全域性變數被遮蔽,即它不起作用。

變數的有效範圍稱為變數的作用域(scope)。歸納起來,變數有4種不同的作用域、檔案作用域(file scope)、函式作用域(function scope)、塊作用域(block scope)和函式原型作用域(function prototype scope)。檔案作用域是全域性的,其他三者是區域性的。

除了變數之外,任何以識別符號代表的實體都有作用域,概念與變數的作用域相似。

c 全域性變數 區域性變數

全域性變數即在函式外宣告的變數,區域性變數即在函式內部宣告的變數,例如 include float num 3.14 乙個名為num的全域性變數 void main float num 2.45 乙個名為num的區域性變數 cout3.14 當區域性變數和全域性變數同名時,在區域性變數作用域內使用該...

c 全域性變數,區域性變數

區域性變數又稱內部變數,是函式內部定義的變數,作用域在定義其的函式內部 全域性變數又稱外部變數,作用於是從其定義開始一直到源程式結束 不論是全域性變數還是區域性變數都是乙個空間上的範圍,即作用域 相對於變數的空間範圍,靜態和動態變數則指乙個時間上的範圍,所謂靜態變數就是在定義時分配固定儲存單元,知道...

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

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