为什么这个数组不变为零?
Why doesn't this array become zero?
我写了这段代码:
#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
就是statics
。static
变量只初始化一次。因此,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];
}
相关文章:
- 数组长度,为什么从命令行获取时不能使用它?
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我不能将 rand() 与数组的大小一起使用?
- 在C++中传递给函数时,为什么要指定数组大小作为参数
- 为什么我的排序算法会更改数组值
- 为什么std::vector比数组慢
- 为什么调用堆栈数组会导致内存泄漏
- 为什么用结构初始化数组需要指定结构名称
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 为什么可以修改数组 b?
- 为什么我们将单个或多维数组的大小声明为常量值?
- 为什么我的数组双精度函数不起作用?
- 为什么 2 个相同数组的元素彼此相等
- 为什么 &a 和 c++ 中的静态数组相同?
- 初始化不可移动对象数组:为什么这样的代码无法在 GCC 上编译?
- C++ 结构数组 - 为什么它必须是指针
- 在C++中添加两个 2D 数组 - 为什么这个程序崩溃
- 动态分配缓冲空间为二维数组 - 为什么失败
- 非恒定大小的数组:为什么这甚至可以工作
- C++字符数组——为什么是垃圾