【发布时间】:2014-06-10 00:13:28
【问题描述】:
在我正在处理的程序中,这个特定的操作绝对不会成为瓶颈,但它确实让我思考。从this one和this one等问题的答案中,我学到了两种在C语言中轻松(有效)将数组的所有元素设置为零的方法:
double myArray[3];
static const double zeroes[3] = {0};
memcpy(myArray, zeroes, sizeof(zeroes));
和
double myArray[3];
memset(myArray, 0, numberOfElementsInMyArray * sizeof(myArray[0]));
在我提出真正的问题之前:我不完全确定,但基于我读过的the information,我假设这种方法至少在原则上会用int 零填充数组(嗯, unsigned char 的但 these seem to be fairly equivalent)。那是对的吗?如果是这样,是否需要将 int 零显式转换为 double 零,或者如果将 myArray 声明为 double 的数组,是否隐式转换?
无论如何,我真正的问题是:如果数组不是很大(就像我在上面声明的myArray),这些方法中的任何一个仍然比小循环更受欢迎吗?如果您有几个相同大小的数组都需要分配零怎么办?如果评论得当,您是否认为可读性是决定的一个因素并支持特定的解决方案?
完全清楚:我不希望将数组初始化为零。
【问题讨论】:
-
如果你关心可读性,memset 是代码的方式。或者,如果您在 Windows 平台上使用原生 API,则使用 ZeroMemory 函数
标签: c arrays performance readability