2012-01-07 60 views

回答

19

在這種情況下,你會用calloc()

array = (int*) calloc(n, sizeof(int)); 

它是安全的假設,所有的系統現在都零位作爲零表示。

§6.2.6.2保證這個工作:

對於任何整數類型,所述對象表示,其中所有的位是零 應在該類型的值零的表示。

也有可能做到的malloc() + memset()組合,但在comments of this answer討論的原因,很可能是更有效地使用calloc()

+0

這不僅僅是「安全地假設」,我會說它實際上是由§6.2.6.2保證的。 – 2012-01-07 21:50:08

+0

@Mysticial由標準(C99,6.2.6.2p5)保證「對於任何整數類型,所有位爲零的對象表示應該表示該類型中的值零。」 – ouah 2012-01-07 21:52:50

+0

是的,你是對的,我找到了這樣一行。添加到我的答案。 – Mysticial 2012-01-07 21:52:59

4

使用calloc函數(usage example):

int *array = calloc(n, sizeof(int)); 

calloc reference page

void *calloc(size_t nelem, size_t elsize);

calloc()功能必須爲每個其大小nelem元件的陣列中的分配未使用的空間字節是elsize空間將被初始化爲所有位0

6
memset(array, 0, n*sizeof(int)); 

或者,你可以分配你使用calloc的內存塊,它可以實現這個要求:

array = calloc(n, sizeof(int)); 

calloc文檔:

void * calloc(size_t nmemb,s ize_t大小);

釋放calloc()函數nmemb個大小的元件各自字節數組分配內存,並返回一個指針分配的內存。內存設置爲零。 ...

0
memset(array, 0, n * sizeof *array); 
0
    for (i=0; i<x; ++i){ 
         array[i]=0; 
        } 

這應該做的伎倆。我想你必須做一個循環,使數組中的每個元素都爲0。 Memset也可以爲你工作。

+0

嘿,你不必編寫一個交互式地證明答案正確的程序。找到在這個來源中的訣竅的一條線是更難... – 2012-01-07 22:00:09

+0

@dgunchev是的,你是對的,但我只是寫了類似的東西,當我看到這個問題的機會,並想到一個快速的答案。 :) – BugShotGG 2012-01-07 22:04:47