在c/c++中變數是最基本的成員,也是我們最常用的東西,變數大體上分為全域性變數與區域性變數兩種,全域性變數是在整個程式中都可以使用,而區域性變數只能在最接近定義它的一組大括號內使用,總的來說,在c/c++裡面,變數只有定義了並在其生命週期內才能使用。說得有點抽象,給大家看個例子吧。
a、全域性變數
#includeusing namespace std;
int a = 0;
void demo()
int main()
return 0;
}
輸出結果如下
分析:我們可以看到,在程式一開始定義了a,然後我們在小demo()函式和main()主函式裡面都使用了這個a,這個就是全域性變數,同時也驗證「變數只有定義了才能使用」,假如我們寫成如下程式:
#includeusing namespace std;
void demo()
int a = 0;
int main()
return 0;
}
編譯出錯,提示為:c:\users\administrator\desktop\demo\demo.cpp(6) : error c2065: 'a' : undeclared identifier意思就是說程式不認識第六行裡面的a,也就是demo()函式中「a++;」裡的a,因為我們把a定義在了demo()函數下面,我們還沒定義a就在demo()函式裡面使用a,編譯器當然不認識嘍。
b、區域性變數
#includeusing namespace std;
void demo()
int main()
return 0;
}
執行結果如下
對比一下如下程式及程式編譯結果
#includeusing namespace std;
void demo()
int main()
cout << a << endl << b << endl;
return 0;
}
程式編譯結果為:c:\users\administrator\desktop\demo\demo.cpp(18) : error c2065: 'a' : undeclared identifierc:\users\administrator\desktop\demo\demo.cpp(18) : error c2065: 'b' : undeclared identifier
意思就是說編譯器不認識「cout << a << endl << b << endl;」這句話裡的a和b變數
分析:圖圖之前說過,區域性變數只能在最接近它定義的一組大括號裡面使用,我們來看a,最接近定義變數a的一組大括號就是demo()函式的大括號,所以我們只能在demo()函式裡面使用a,同樣的,我們只能在for迴圈語句裡面使用b。同時在看看我們一言以蔽我們變數作用域的一句話「變數只有定義了才能使用」,我們在demo()函式中定義了a,那麼出了這個demo()大括號,它的生命週期就結束了,就會被系統銷毀,a也就不存在了,既然不存在了,我們使用cout << a << endl << b << endl;編譯器當然不認識a和b了。
請大家一定要記住「變數只有定義了,並在其生命週期內才能使用」
區域性變數與全域性變數
根據c語言的說法,區域性變數 定義在方法內部的變數叫區域性變數 全域性變數 定義在方法外部的變數叫全域性變數。區域性變數和全域性變數的主要區別在於二者的生存週期不同。全域性變數的生存週期 靜態分配記憶體,程式執行期間常駐記憶體,直到程式執行結束。區域性變數的生存週期 動態分配記憶體,位於執行緒堆疊中...
全域性變數與區域性變數
區域性變數 在區域性 塊內定義 作用域在區域性 塊內,生命週期在區域性 塊內,結束時銷毀。include void test int main return 0 輸出 1111111111 全域性變數 在所有 塊外定義 作用域是整個工程,生命週期程式開始至結束。工程test 10 10 原始檔sum...
區域性變數與全域性變數
資料的儲存型別 一 變數的作用域 變數的作用域是指變數有效性的範圍,與變數定義的位置密切相關,作用域是從空間這個角度來描述變數的,按照作用域的不同,變數可分為區域性變數和全域性變數。1 區域性變數 在函式 或 塊 內部定義的變數,也稱為內部變數,區域性變數只能在定義它的函式 或 塊 內使用,其他函式...