2012-01-07 69 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