局部變量和全局變量的區別
阿新 • • 發佈:2017-08-22
沒有 例如 賦值 ont 初始化 退出 std cpp 部分
局部變量和全局變量的區別
局部變量可以與全局變量重名,但是局部變量會屏蔽全局變量。要使用全局變量,需要使用::。在函數體內引用變量會用到同名的局部變量而不是全局變量,對於一些編譯器來說,在同一個函數體內可以定義多個同名的局部變量。例如我們可以在一個函數內部,在兩個循環中都定義同名的局部變量i,而局部變量i的作用域在那個循環體內
具體來說,全局變量和局部變量的區別如下:
1. 作用域不同:全局變量的作用域為整個程序,而局部變量的作用域為當前函數或循環等
2. 內存存儲方式不同:全局變量存儲在全局數據區中,局部變量存儲在棧區
3. 生命期不同:全局變量的生命期和主程序一樣,隨程序的銷毀而銷毀,局部變量在函數內部或循環內部,隨函數的退出或循環退出就不存在了
4. 使用方式不同:全局變量在聲明後程序的各個部分都可以用到,但是局部變量只能在局部使用。函數內部會優先使用局部變量再使用全局變量
需要註意一點的是,局部變量不能賦值為同名全局變量的值。
#include<iostream>
#include<algorithm>
using namespace std;
int value = 1;
int main(){
//test
int value = value;
cout<<value<<endl;
return 0;
}
程序輸出:-898993460
分析如下:
1. 定義了一個全局變量value初始化值為1,同時在main函數內部定義了一個局部變量value
2. 在main函數內部對局部變量value進行賦值value = value,因為局部變量會屏蔽全局變量,因此此時賦值語句中兩個value都是局部變量,因為value還沒有初始化所以值為隨機值
3. 所以輸出value的時候值為隨機值,而不是1
局部變量和全局變量的區別