2017-08-27 9 views
1

内部関数静的変数は、再度呼び出されたときに値を保持しますが、この場合はなぜ起きないのですか?関数内に値を保持していない静的変数

#include <stdio.h> 

void print(void) { 
    static int x; 
    x = 10; 
    x += 5; 
    printf("%d ", x); 
} 

int main() { 
    print(); 
    print(); 
    return 0; 
} 

出力を15 15としています。

+6

を与えるの下にはあなたは、x = 10 'としてリセット; '各呼び出しを。 – BLUEPIXY

+1

C本が緊急に必要 –

答えて

8

あなたがするたびに新しい値を割り当てる:

static int x; 
x = 10;    // <- assignment 

あなたはおそらくしたい何が初期化される:

static int x = 10; // <- initialization 

初期化変数の一生の間にのみいったん起こると、staticはのための変数の命を意味しあなたのプログラムの実行時間全体。

0

静的変数を初期化すると問題が解決します。修正の例では、問題を解決してくれ1520

#include <stdio.h> 

void print(void) { 
    static int x = 10; //Initialize here 
    // x = 10; //remove this statement 
    x += 5; 
    printf("%d ", x); 
} 

int main() { 
    print(); 
    print(); 
    return 0; 
} 
関連する問題