1. ホーム
  2. c

[解決済み] C言語の関数内の静的変数

2022-05-25 08:16:54

質問

プリントアウトされるのは何でしょうか?6 6 or 6 7? また、その理由は?

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

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

どのように解決するのですか?

ここでは、寿命とスコープの2つの問題があります。

変数のスコープとは、変数名を見ることができる場所です。 ここでは x は関数の中だけで見ることができます。 foo() .

変数のライフタイムとは、その変数が存在する期間のことです。 もし x が static というキーワードなしで定義されていた場合、その有効期限は foo() から戻るまでです。 foo() からの戻り値; なので、呼び出すたびに 5 に再初期化されます。

キーワード static は変数の寿命をプログラムの寿命まで延長する働きをします。 foo() .