C清除双打数组的最佳方法

时间:2011-03-18 16:58:20

标签: c arrays pointers free calloc

在C中,如何重置给定指针以使数组中的所有值都是指定值?最好使用for循环,还是有一个函数可以用来将数组中的所有值设置为0。

我的代码目前是这样的:

int main()
{
     double *my_values = calloc(10, sizeof(double));
     do_something_with_values(my_values);

     free(my_values);
     my_values = calloc(10, sizeof(double));

     do_something_else_with_values(my_values);
     free(my_values);
}

这个(对我来说)看起来很hacky,我该如何改进这段代码呢?

9 个答案:

答案 0 :(得分:6)

memset可以将数组设置为所有零或任何您想要的值

答案 1 :(得分:4)

代码不只是hacky,它可能导致严重且难以重现错误。

通过执行free然后执行新的calloc调用,不保证将相同的内存空间分配给您的数组,如果您有一个指向此数组的指针,这可能会有问题在此之前尝试使用它。

答案 2 :(得分:1)

memset( my_values, 0, 10 * sizeof(double));

答案 3 :(得分:1)

如果这实际上总是与示例中的固定大小数组有关,那么您的分配可能已经在错误的轨道上了。做得更好

int main(void) // <- this is the correct signature
{
     double my_values[10] = { 0 };
     do_something_with_values(my_values);

     memcpy(my_values, (const double[10]){0}, 10*sizeof(double));

     do_something_else_with_values(my_values);
}

此处的定义和初始化确保在运行此任何体系结构的情况下使用正确的0.0值初始化数组。使用memcpy重新初始化也是如此。它使用复合文字来实现这一点。您必须为该部分配备符合C99的编译器。

答案 4 :(得分:0)

最简单的方法可能是使用memset

    memset( the_array, '\0', sizeof(the_array) );

这会使你的整个数组归零

答案 5 :(得分:0)

使用memset

memset(my_values, 0, 10 * sizeof(double));

答案 6 :(得分:0)

我可能完全不在这里,但是:我会使用memset。

http://www.linuxmanpages.com/man3/memset.3.php

答案 7 :(得分:0)

曾几何时,那是1975年,有人开始为一种名为C的全新编程语言编写库。如果你有超过64KB的RAM,你可以访问世界上最大的超级计算机之一。

因此,当设计memset()之类的例程时,没有人能够想象您可能想要初始化大于8位字节的内容。当时一个字节巨大

如果你需要更大的东西,你必须编写自己的循环。从积极的方面来说,当所有字节都为0时,所有C类型都为零。因此,您可以使用calloc()或从其他地方获取内存并使用memset(ptr, 0, size);

答案 8 :(得分:0)

对于初始化,您可以简单地使用:

double myarray[100] = {0};
相关问题