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)尽管有这段代码,但每次调用 Array 的元素都不会变为零:

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

3 回答 3

5

数组是static,这意味着它只被初始化一次(第一次function被调用)。此后它保留其现有项目。如果您删除static关键字,您将得到 1, 1, 1, 1, 1。

顺便说一句,for里面的循环function是多余的(保证只执行一次)。

于 2012-09-04T08:39:05.137 回答
3

当您使用static关键字在函数内声明变量时。然后:

  • 该变量是在第一次调用函数时创建的。
  • 此后,该变量在程序的整个生命周期内都保持活动状态 &
  • 变量的值在函数调用之间保持不变。

你观察到的是关键字的这个属性static在起作用。

于 2012-09-04T08:42:02.550 回答
1

Arraystatics。_ 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 回答