函式五(區域性變數與全域性變數和域運算子)
阿新 • • 發佈:2020-11-03
根據變數作用域的不同,可將程式中的變數分為區域性變數和全域性變數。
1.區域性變數
在函式或者塊內定義的變數稱為區域性變數。區域性變數僅在定義它的函式或塊內起作用,在這個範圍之外不能使用這些變數。區域性變數的作用域也稱為塊作用域。
函式內部使用的區域性變數包括形式引數和函式體內定義的變數。例如:
float f1(int a) {...... int b, c;//區域性變數 a ,b ,c在函式體f1內有效 .... } void main() { ...... int m, n;//區域性變數m,n 有效,區域性變數a,b,c 無效 ...... }
說明:
(1)不同函式中可以使用相同名字的變數,它們代表不同的變數,互不干擾
(2)形式引數也是區域性變數
2全域性變數
在函式外部定義的變數稱為全域性變數。全域性變數的作用域是從定義的位置開始到本原始檔的結束。它可以為本檔案中的其他函式所共用。全域性變數可以在各個函式之間建立資料傳輸通道,但濫用會破壞程式的模組化結構。全域性變數在編譯時在全域性資料區分配記憶體空間,在未給出初始化值時系統自動初始化為0。
說明:
(1)全域性變數的作用是增加了函式間資料聯絡的渠道。由於同一個檔案中都能使用全域性變數的值,因此,在一個函式中改變了全域性變數的值,就會影響到其他函式。過多使用全域性變數將會降低程式的清晰性。
(2)全域性變數在程式的執行過程中都在儲存空間,而不是僅在需要時才開闢空間。
(3)使用全域性變數降低了函式的通用性
3.域運算子
通常情況下,如果有兩個同名變數,一個是全域性的,另一個是區域性的,那麼區域性變數在其作用域內具有較高的優先權,它將遮蔽全域性變數。如果希望在區域性變數的作用域內使用同名的全域性變數,可以在該變數前加上“::”。“::”稱為作用域運算子。
例1:全域性變數和區域性變數同名
#include<iostream> using namespace std; int avar=10; //全域性變數avar int main(){ int avar; //區域性變數avar avar=25; cout<<"avar is "<<avar<<endl; //將會輸出avar is 25 return 0; }
例2:作用域運算子的使用。
#include<iostream> using namespace std; int avar=10; //全域性變數avar int main(){ int avar; //區域性變數avar avar=25; cout<<"local avar is "<<avar<<endl; //將會輸出 local avar is 25 cout<<"global avar is "<<::avar<<endl; //將會輸出 global avar is 10 return 0; }