我在C中有一个大数组(不是c++,如果这有区别的话)。我想初始化相同值的所有成员。
我发誓我曾经知道一个简单的方法。在我的情况下,我可以使用memset(),但没有一种方法来做到这一点,这是建立在C语法?
我在C中有一个大数组(不是c++,如果这有区别的话)。我想初始化相同值的所有成员。
我发誓我曾经知道一个简单的方法。在我的情况下,我可以使用memset(),但没有一种方法来做到这一点,这是建立在C语法?
当前回答
通过所有的喋喋不休,简短的回答是,如果你在编译时打开优化,你不会做得比下面更好:
int i,value=5,array[1000];
for(i=0;i<1000;i++) array[i]=value;
额外的好处:代码实际上是易读的:)
其他回答
在过去(我并不是说这是个好主意),我们设置了第一个元素,然后:
Memcpy (&element [1], &element [0], sizeof (element)-sizeof (element [0]);
甚至不确定它是否还能工作(这将取决于memcpy的实现),但它通过重复地将初始元素复制到下一个元素来工作-甚至对结构数组也有效。
你可以像上面详细描述的那样做整个静态初始化器的事情,但是当你的数组大小发生变化时(当你的数组变大时,如果你没有添加适当的额外初始化器,你就会得到垃圾),这可能是一个真正的麻烦。
Memset为您的工作提供了一个运行时命中,但是任何正确的代码大小命中都不受数组大小变化的影响。当数组大于几十个元素时,我几乎在所有情况下都会使用这个解决方案。
如果静态声明数组真的很重要,我会写一个程序来为我编写程序,并使其成为构建过程的一部分。
对于初始化“普通”数据类型(如int数组),你可以使用括号符号,但如果数组中仍有空格,它将把最后一个后面的值归零:
// put values 1-8, then two zeroes
int list[10] = {1,2,3,4,5,6,7,8};
如果你的编译器是GCC,你可以使用以下“GNU扩展”语法:
int array[1024] = {[0 ... 1023] = 5};
查看详细描述: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html
int i;
for (i = 0; i < ARRAY_SIZE; ++i)
{
myArray[i] = VALUE;
}
我觉得这比
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5...
以防数组的大小发生变化。