2012-09-04 96 views
0

我寫這段代碼:爲什麼這個數組不爲零?

#include <iostream> 

using namespace std; 

double function(int i) 
{ 
    static int Array[5] = {0}; 

    for(int j = i ; j <= i ; j++) 
    { 
     Array[j+1] = Array[j]+1; 
    } 
    return Array[i+1]; 
} 

int main() 
{ 
    for(int i = 0 ; i <= 4 ; i++) 
    { 
     cout << function(i) << endl; 
    } 
    return 0; 
} 

,輸出1,2,3,4,5

我很奇怪,爲什麼在function(i)每次調用數組中的元素不會成爲零,儘管這段代碼:

static int Array[5] = {0}; 
+0

因爲這就是聲明變量'static'的要點。事實上,這個程序看起來像是爲了證明這個事實。所以無論是1.你是從外部來源得到的,也應該解釋這種行爲的原因,或者2.你寫了它來測試'static'的行爲,在這種情況下你應該已經有了一些線索答案,或者3.它是作業。 –

回答

5

該數組是static,這意味着它只被初始化一次(第一次調用function)。它保留其現有的項目。如果您刪除了static關鍵字,您將得到1,1,1,1,1。

順便說一下,function內部的for循環是多餘的(它保證只執行一次)。

3

當您使用static關鍵字在函數中聲明變量時。然後:

  • 該變量是在第一次調用該函數時創建的。
  • 此後變量在程序的整個生命週期中保持有效&
  • 變量的值在函數調用之間持續存在。

你觀察到的是關鍵字static在工作中的這種屬性。

1

Arraystaticsstatic變量只能初始化一次。因此,Array僅在第一次呼叫時變爲零。

如果您刪除了static關鍵字,它將在每次調用時變爲零。

順便把下面的代碼是很奇怪:

for(int j = i; j <=i ; j++) 

,因爲它只能運行於j=i。因此,您可以通過以下方式更改整個功能:

double function(int i) 
{ 
    static int Array[5] = {0}; 
    Array[i+1] = Array[i]+1; 
    return Array[i+1]; 
}