[英]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.