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};
4

3 に答える 3

5

配列はですstatic。これは、一度だけ初期化されることを意味します(最初functionに呼び出されます)。その後、既存のアイテムを保持します。staticキーワードを削除すると、代わりに1、1、1、1、1が表示されます。

ちなみに、for内部のループfunctionは冗長です(1回だけ実行されることが保証されています)。

于 2012-09-04T08:39:05.137 に答える
3

static関数内で変数を宣言するためにキーワードを使用する場合。それで:

  • 変数は、関数が最初に呼び出されたときに作成されます。
  • その後、変数はプログラムの存続期間を通じて存続します。
  • 変数の値は、関数呼び出し間で保持されます。

あなたが観察するのは、機能しているキーワードのこのプロパティですstatic

于 2012-09-04T08:42:02.550 に答える
1

Arrayですstatics。_ static変数は一度だけ初期化されます。そのため、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];
}
于 2012-09-04T08:52:40.067 に答える