簡體   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