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

Why doesn't this array become zero?

本文关键字:数组 为什么      更新时间:2023-10-16

我写了这段代码:

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

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

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

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

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

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

Array就是staticsstatic变量只初始化一次。因此,Array仅在第一次调用时变为零。

如果删除static关键字,则每次调用时该关键字都将变为零。

顺便说一下,下面的代码很奇怪:

for(int j = i; j <=i ; j++)

因为它只针对CCD_ 15运行。因此,您可以通过以下方式更改整个功能:

double function(int i)
{
    static int Array[5] = {0};
    Array[i+1] = Array[i]+1;
    return Array[i+1];
}