繁体   English   中英

如何初始化静态C数组?

[英]How to initialize a static C array?

假设每次调用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数组,要么像第一个版本一样手动填充数组(甚至可以编写程序来生成将数组初始化为文件的部分,然后将其复制进入您的来源)。 在这种情况下,数组的填充是由编译器完成的,没有运行时的损失。

您可以使用另一个静态变量来执行此操作,该变量保存数组的标记或起点。

{
    static int fst = 0,
        v[MAXSIZE] = {0};    //#define MAXSIZE 100
        fst++;
        for(int i = 0; i < (MAXSIZE+fst-1); i++) v[i] = i + fst;
}

您不能像这样初始化您的静态数组。 每当调用f第二个代码块中的第一个for循环就会被调用。

您可以将static v变量初始化为NULL,然后在for循环实际增加数组元素之前,检查NULL并在必要时使用i+1初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM