我创建了一个动态数组,并且我需要将所有成员初始化为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