2014-09-01 35 views
-1

我有一個關於靜態變量的簡單問題。如果我在一個函數中聲明瞭一個靜態變量:C中的局部靜態變量範圍

void main() 
{ 
    int k = 0 
    while(k<=4) 
    { 
     fun(); 
     k++; 
    } 
} 
int fun() 
{ 
    static int i=5; 
    i++; 
    printf(Value %d\t", i); 
    return 0; 
} 

據我所知,函數將在返回後釋放。但存儲的值是i。是一個像全局變量一樣的靜態變量。

+0

'靜態就像全局變量.'沒有!!!!在生命時間方面是相同的,在可見度方面不同。 – 2014-09-01 06:20:25

+0

請先修復語法錯誤,然後再轉到哲學問題:) – 2014-09-01 06:21:02

+1

C規範沒有說明變量必須存儲在哪裏,只是局部靜態變量生存期在整個程序中。但是,編譯器通常將局部靜態變量與全局變量一起存儲。 – 2014-09-01 06:21:42

回答

2

該函數不會在返回時取消分配i裏面的fun()i的存儲與全局變量處於相同的一般區域 - 但它不是全局變量。它只能在定義它的功能fun()內部訪問。它與任何其他變量i或任何其他變量i(在任何源文件中都是靜態的)或源文件中定義了fun()的文件範圍靜態變量i分開。它只要程序就有一生。

1

據我所知,函數返回後會釋放 - 。我認爲你的假設是錯誤的!

static從函數返回後,變量不會被釋放。

它在哪裏存儲? - static變量存儲在「數據部分」或「數據存儲器」中。

生活 - static變量的壽命從程序加載到RAM中開始,到程序執行結束時開始!