局部變數
外觀
在電腦科學中,局部變數(英語:local variables)是擁有局部作用域的變數。這樣的變數只能由聲明它的函數或塊中訪問。在僅有兩層可見性的程式語言中,局部變數對應全域變數;另一方面,許多類ALGOL語言允許任意多層的巢狀函數,各自擁有私有變數、函數、常數和類型。
大多數程式語言中,局部變數是直接儲存在呼叫堆疊上的自動變數。即遞歸函數呼叫自己時,局部變數的每一份實例都在不同的地址空間中。於是在當前作用域對變數的聲明、寫入、讀取都不會在其被聲明的函數外產生副作用。
靜態局部變數
[編輯]靜態局部變數(英語:static local variables)是一類特殊的局部變數,許多主流語言(C/C++、Visual Basic、 VB.NET等)中都有該變數。靜態局部變數的值將一直保留,即便一個函數結束,另一個函數開始使用該變數。換言之,它是局部範圍(local scope)的靜態變數。
靜態局部變數 和 靜態全域變數(英語:static global variables)的生命周期一樣,它們會存活到程式結束為之。[1] 它們的區別:靜態局部變數只可被一個函數訪問(function scope), 靜態全域變數 可被所有函數訪問(global scope)。
#include <iostream>
using namespace std;
void test()
{
// var是一个静态局部变量
static int var = 0;
++var;
cout << var << endl;
}
int main()
{
test(); // 输出1
test(); // 输出2
return 0;
}
閉包(英語:Closure)同樣可以做到靜態局部變數的效果。
另見
[編輯]參考資料
[編輯]- ^ Current C standardPDF (3.61 MB) (截至2009年[update]). 注意第32頁章節 6.2.4《Storage durations of objects》。