我創建了一個動態數組,並且我需要將所有成員初始化爲0. 這怎麼能在C中完成?如何在C中初始化動態int數組元素爲0
int* array;
array = (int*) malloc(n*sizeof(int));
我創建了一個動態數組,並且我需要將所有成員初始化爲0. 這怎麼能在C中完成?如何在C中初始化動態int數組元素爲0
int* array;
array = (int*) malloc(n*sizeof(int));
在這種情況下,你會用calloc()
:
array = (int*) calloc(n, sizeof(int));
它是安全的假設,所有的系統現在都零位作爲零表示。
§6.2.6.2保證這個工作:
對於任何整數類型,所述對象表示,其中所有的位是零 應在該類型的值零的表示。
也有可能做到的malloc()
+ memset()
組合,但在comments of this answer討論的原因,很可能是更有效地使用calloc()
。
使用calloc
函數(usage example):
int *array = calloc(n, sizeof(int));
void *calloc(size_t nelem, size_t elsize);
的
calloc()
功能必須爲每個其大小nelem
元件的陣列中的分配未使用的空間字節是elsize
。 空間將被初始化爲所有位0
memset(array, 0, n*sizeof(int));
或者,你可以分配你使用calloc
的內存塊,它可以實現這個要求:
array = calloc(n, sizeof(int));
calloc
文檔:
void * calloc(size_t nmemb,s ize_t大小);
的釋放calloc()函數nmemb個大小的元件各自字節數組分配內存,並返回一個指針分配的內存。內存設置爲零。 ...
memset(array, 0, n * sizeof *array);
for (i=0; i<x; ++i){
array[i]=0;
}
這應該做的伎倆。我想你必須做一個循環,使數組中的每個元素都爲0。 Memset也可以爲你工作。
嘿,你不必編寫一個交互式地證明答案正確的程序。找到在這個來源中的訣竅的一條線是更難... – 2012-01-07 22:00:09
@dgunchev是的,你是對的,但我只是寫了類似的東西,當我看到這個問題的機會,並想到一個快速的答案。 :) – BugShotGG 2012-01-07 22:04:47
這不僅僅是「安全地假設」,我會說它實際上是由§6.2.6.2保證的。 – 2012-01-07 21:50:08
@Mysticial由標準(C99,6.2.6.2p5)保證「對於任何整數類型,所有位爲零的對象表示應該表示該類型中的值零。」 – ouah 2012-01-07 21:52:50
是的,你是對的,我找到了這樣一行。添加到我的答案。 – Mysticial 2012-01-07 21:52:59