假设我想在每次调用 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]++;
}
不确定如何实现它。谢谢!
最佳答案
在函数内部声明的static
数组只能在其内部被引用,只要程序运行它就存在。它可以按照您在第一个版本中的提示进行初始化。
第二个版本首先用值填充数组,然后在每次调用函数时递增它们。大概不是你想要的。
要么将初始化和递增分成两个函数,在两者之外定义 static
数组,要么像您的第一个版本那样手动填充数组(甚至可以编写一个程序来生成初始化部分数组到一个文件中,然后将其复制到您的源代码中)。在这种情况下,数组的填充由编译器完成,没有运行时惩罚。
关于c - 如何初始化静态 C 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170516/