用一个默认值初始化普通数组
这个问题在这里已经有了答案:
使用您使用的语法,
int array[100] = {-1};
说的“第一元件设置-1
,其余的0
”,因为所有的元件省略都设置为0
。
在C ++中,为了将它们全部设置为-1
,你可以使用类似std::fill_n
(来自<algorithm>
):
std::fill_n(array, 100, -1);
在便携式C中,你必须推出你自己的循环。 有编译器扩展,或者如果可接受的话,您可以依赖实现定义的行为作为快捷方式。
gcc编译器有一个扩展,它允许使用以下语法:
int array[100] = { [0 ... 99] = -1 };
这会将所有元素设置为-1。
这就是所谓的“指定初始化器”,在这里可以获得更多信息。
注意这不是为gcc c ++编译器实现的。
您链接的页面已经给出了第一部分的答案:
如果指定了明确的数组大小,但指定了更短的初始化列表,则将未指定的元素设置为零。
没有内置的方法来将整个数组初始化为某个非零值。
至于哪一个更快,通常的规则适用:“给予编译器最大自由的方法可能更快”。
int array[100] = {0};
只是告诉编译器“将这100个int设置为零”,编译器可以自由优化。
for (int i = 0; i < 100; ++i){
array[i] = 0;
}
是更具体的。 它告诉编译器创建一个迭代变量i
,它告诉它元素应该被初始化的顺序,等等。 当然,编译器可能会优化这一点,但问题在于,在这里你正在过分指出问题,迫使编译器更努力工作以达到相同的结果。
最后,如果你想设置数组为非零值,你应该(至少在C ++中)使用std::fill
:
std::fill(array, array+100, 42); // sets every value in the array to 42
再次,你可以对数组做同样的事情,但这更简洁,并且给编译器更多的自由。 你只是说你想让整个数组填充42的值。你不应该以什么顺序说明它应该完成的任何事情,或者其他任何事情。
链接地址: http://www.djcxy.com/p/78481.html上一篇: Initialization of a normal array with one default value