如何在C语言中将动态整型数组的元素初始化为0

10

我创建了一个动态数组,并且需要将所有成员初始化为0。在C语言中怎样实现?

   int* array;
    array = (int*) malloc(n*sizeof(int));
5个回答

21

在这种情况下,你应该使用calloc()函数:

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

可以安全地假设,现在所有的系统都把所有零位作为零的表示。

§6.2.6.2保证这将起作用:

  

对于任何整数类型,其中所有位都是零的对象表示应该是该类型中值为零的表示。

也可以使用 malloc() + memset() 的组合方法,但由于在此答案的评论中讨论的原因,使用 calloc() 可能更有效率。


不仅可以“安全地假设”,我会说这实际上是由§6.2.6.2保证的。 - Matteo Italia
@Mysticial 这是由标准(C99,6.2.6.2p5)保证的:“对于任何整数类型,所有位都为零的对象表示应该是该类型中值为零的表示。” - ouah
是的,你说得对,我找到了这行代码。我会在我的答案中加入它。 - Mysticial
值位 => "每个值位都应具有与相应无符号类型的对象表示中相同位的相同值"; 符号位 => "如果符号位为零,则不应影响结果值。" 填充位不相关。 - Matteo Italia
在 C 中,强制类型转换也是不必要的。 - Mat
显示剩余3条评论

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

或者,您可以使用calloc分配内存块,该函数会自动执行以下操作:

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

calloc 文档:

void *calloc(size_t nmemb, size_t size);

calloc() 函数分配 nmemb 个大小为 size 字节的数组所需的内存,并返回指向已分配内存的指针。分配的内存被设置为零。...


4

使用calloc函数(用法示例):

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

来自calloc参考页面:

void *calloc(size_t nelem, size_t elsize);

calloc()函数将为一个由nelem个元素组成的数组分配未使用的空间,每个元素的大小为elsize字节。 该空间将被初始化为所有位0。


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

0
                    for (i=0; i<x; ++i){
                        array[i]=0;
                    }

应该就可以了。我猜你需要编写一个循环,使数组中的每个元素都变为0。Memset也可以为你工作。


嘿,你不必编写一个交互式证明答案正确的程序。在这个源代码中找到那一行符合要求的代码要更难一些... - Doncho Gunchev
@dgunchev 是的,你说得对,但我只是在写一个类似于c arm的东西,当我偶然看到这个问题时,想到了一个快速的答案。 :) - BugShotGG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接