如何初始化静态C数组?

时间:2013-03-02 03:55:07

标签: c static

我想每次调用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]++;
}

不确定如何实现它。谢谢!

3 个答案:

答案 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进行初始化。