2016-01-17 53 views
2

我想用C語言設置一個int數組的全局引用,但是我想在main函數內初始化它(實際上用戶將聲明它的大小)。任何人都知道這是如何完成的?C:定義用戶可聲明其大小的全局數組變量

在此先感謝!

+0

使用全局變量通常不是一個好的解決方案,爲什麼不將數組和它的大小從其他模塊傳遞給函數? – chqrlie

+2

形式上,你不能那樣做。全局數組的大小在編譯時固定。您可以通過使用全局指針並在任何代碼使用它之前分配正確的空間來實現等效效果。但避免使用全局變量通常是個好主意。它並不總是一個好主意:'stdin','stdout'和'stderr'是全局變量,如果它們不是一個混淆的滋擾。 OTOH,'errno'是全球性的,並且設法解決問題,儘管標準已經部分抵消了其中的最壞情況。 –

回答

4

聲明一個指向int的指針作爲全局變量並使用malloc初始化它在main中。

/* outside any function, so it's a global variable: */ 
int *array; 
size_t array_size; 

/* inside main(): */ 
array_size = user_defined_size; 
array = malloc(sizeof(int)*array_size); 
if (array == NULL) { 
    /* exit - memory allocation failed. */ 
} 
/* do stuff with array */ 
free(array); 

如果需要從另一模塊(源文件)訪問全局變量,有或聲明它再次使用

extern int *array; 
extern size_t array_size; 

,優選地,在頭文件中聲明他們extern包括在任何來源使用該數組的文件,包括其定義的來源(以確保類型一致性)。

+1

頭文件應該用於定義指針('array')的文件以及使用該數組的源文件中。這可確保(或確保儘可能做到最多)數組的定義和用途及其大小保持一致。 –