1. 程式人生 > 實用技巧 >函式五(區域性變數與全域性變數和域運算子)

函式五(區域性變數與全域性變數和域運算子)

根據變數作用域的不同,可將程式中的變數分為區域性變數和全域性變數。

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;
}