我想每次调用f()时都想做这样的事情来增加一个int数组:
void f()
{
static int v[100]={1,2,3...100};
for (int i=0; i<100; i++) v[i]++;
}
即。我想要:
first call f(): v[100]={1,2,3...100};
second call f(): v[100]={2,3,4...101};
...
显然以下不会这样做:
void f()
{
static int v[100]; for (int i=0; i<100; i++) v[i]=i+1;
for (int i=0; i<100; i++) v[i]++;
}
不确定如何实现它。谢谢!
答案 0 :(得分:2)
在函数内声明的static
数组只能在其中引用,并且只要程序运行它就存在。它可以在您提示第一个版本时进行初始化。
第二个版本首先使用值填充数组,然后在每次调用函数时递增它们。大概不是你想要的。
将初始化和递增分成两个函数,在两者之外定义static
数组,或者像第一个版本一样手动填充数组(甚至可以编写程序来生成将数组初始化为一个文件,然后将其复制到您的源中)。在这种情况下,数组的填充由编译器完成,没有运行时惩罚。
答案 1 :(得分:1)
您可以使用另一个保存数组标记或起点的静态变量来执行此操作。说
{
static int fst = 0,
v[MAXSIZE] = {0}; //#define MAXSIZE 100
fst++;
for(int i = 0; i < (MAXSIZE+fst-1); i++) v[i] = i + fst;
}
答案 2 :(得分:0)
您无法像这样初始化静态数组。每次调用f
时,第二个代码块中的第一个for循环就会被调用。
您可以将静态v
变量初始化为NULL,然后在实际递增数组元素的for循环之前,检查NULL并在必要时使用i+1
进行初始化。