2013-10-08 64 views
2

我正在學習C.爲什麼靜態變量不會超過1使用靜態變量時出錯

#include <stdio.h> 

int foo() 
{ 
    static int a = 0; 
    return a+1; 
} 

int main() 
{ 
    int i; 
    for (i = 0; i < 10; i = foo()) 
    printf("%d\n", i); 
    return 0; 
} 

這段代碼中的錯誤在哪裏?

+0

爲什麼你認爲它會? –

+0

@ColeJohnson然後我不知道它沒有任何意義。現在我懂了。 – noufal

回答

5

因爲您沒有儲存任何東西。這應該爲你工作:

int foo() 
{ 
    static int a = 0; 
    return ++a; 
} 

這裏return ++a意味着a = a + 1,即增加一個第一,然後返回其值。 a+1計算結果爲1但不回存儲任何進入a

+0

我明白了...... – noufal

0

您從不爲「a」變量賦值。你只是從例程中返回一個+ 1的值。

0

下面將工作:

#include <stdio.h> 

int foo() 
{ 
    static int a = 0; 
    a++; 
    return a; 
} 
+0

OP要求解釋爲什麼,而不是代碼解決方案。 –

0

這是一個無限循環,你正在返回一個+ 1。每次它將返回0 + 1,並且你的a值沒有得到更新。根據你在你的條件循環循環運行無窮大,直到超時發生。 試試這裏a的值是在每個函數調用中不斷更新。

int foo() 
{ 
    static int a = 0; 
    a++; 
    return a; 
}