c++ 动态分配和设置为零的浮动数组

在分配过程中,如何自动将动态分配的浮点数设置为零(0.0)

这个可以吗

float* delay_line = new float[filter_len];

//THIS
memset(delay_line, 0.0, filter_len); //can I do this for a float??

//OR THIS
for (int i = 0; i < filter_len; i++)
  delay_line[i] = 0.0;

哪种是最有效的方法

谢谢

使用sizeof(float)* filter_len,除非你在某些奇怪的实现中工作,其中sizeof(float)== sizeof(char)。

memset(delay_line, 0, sizeof(float) * filter_len);

编辑:由于Stephan202在注释中指出,0.0是用于对memset进行编码的特别简单的浮点值,因为0.0的IEEE标准表示全为零。

memset是在内存的操作,而不是数字的领域。声明为int的第二个参数被转换为unsigned char。如果C的实现使用每个浮点数四个字节,则下列关系成立:

>如果您将float设为0,则该值为0.0。
>如果您将float设为1,则值为2.36943e-38。
>如果用42记忆浮点数,则值为1.51137e-13。
>如果您将浮点数设为64,则值为3.00392。

所以零是一个特例。

如果这似乎是特别的,请记住,memset在< cstring>或< string.h&gt ;,经常用于制作“***************”或“--------------- ---”。它也可以用于零记忆是一个漂亮的副作用。 正如米兰Babuškov在评论中指出的那样,有一个功能bzero(非标准和不推荐使用),现在Mac和Linux,而不是微软,这是因为它是专门为将内存设置为零,安全地省略了几个指令。如果您使用它,并且您的编译器的未来发布版本将忽略它,则在本地兼容性修补程序中实现bzero是非常简单的,除非将来的版本已经重新使用了其他目的的名称。

http://stackoverflow.com/questions/877385/dynamically-allocating-and-setting-to-zero-an-array-of-floats

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 动态分配和设置为零的浮动数组