我写了这段代码:
#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};
答案 0 :(得分:5)
数组为static
,这意味着它只被初始化一次(第一次调用function
)。它保留了现有的物品。如果您删除static
关键字,则会获得1,1,1,1,1。
顺便说一句,for
内的function
循环是多余的(保证只执行一次)。
答案 1 :(得分:3)
使用static
关键字在函数内声明变量时。然后:
您观察到的是关键字static
在工作中的此属性。
答案 2 :(得分: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];
}