为什么这个数组不变为零?

时间:2012-09-04 08:36:44

标签: c++ arrays

我写了这段代码:

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

3 个答案:

答案 0 :(得分:5)

数组为static,这意味着它只被初始化一次(第一次调用function)。它保留了现有的物品。如果您删除static关键字,则会获得1,1,1,1,1。

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

答案 1 :(得分:3)

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

  • 首次调用该函数时会创建变量。
  • 此后,变量在整个程序生命周期内保持活动状态
  • 变量的值在函数调用之间持续存在。

您观察到的是关键字static在工作中的此属性。

答案 2 :(得分:1)

Arraystaticsstatic个变量仅初始化一次。因此,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];
}