1. 全局變量
全局變量存儲在靜態存儲區,其作用域是全局作用域,生命週期是整個程序的生命週期。
具體而言,在一個文件中定義一個全局變量,在程序的其它文件中可以通過extern關鍵字再次聲明說明該變量已經定義。
2. 靜態全局變量
靜態全局變量存儲在靜態存儲區,其作用域只能是定義該變量的文件,生命週期是整個程序的生命週期。
3. 靜態局部變量
靜態局部變量存儲在靜態存儲區,作用域是定義該變量的函數內,生命週期是整個程序的生命週期。
值得一提的是,退出該函數後, 儘管靜態局部變量還繼續存在,但不能使用它,雖然離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了上次被調用後留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮採用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用。
int increment() {
static int a = 0;
a++;
return a;
}
int main() {
int i = 0;
for (i = 0; i < 5; i++)
cout << increment() << endl;
return 0;
}
1
2
3
4
5
static變量總結:
1. static 全局變量:改變作用範圍,不改變存儲位置
2. static 局部變量:改變存儲位置,不改變作用範圍