我在C中有一个大数组(不是c++,如果这有区别的话)。我想初始化相同值的所有成员。
我发誓我曾经知道一个简单的方法。在我的情况下,我可以使用memset(),但没有一种方法来做到这一点,这是建立在C语法?
我在C中有一个大数组(不是c++,如果这有区别的话)。我想初始化相同值的所有成员。
我发誓我曾经知道一个简单的方法。在我的情况下,我可以使用memset(),但没有一种方法来做到这一点,这是建立在C语法?
当前回答
用0初始化
char arr[1000] = { 0 };
最好使用普通的“for循环”来进行除0以外的初始化。
char arr[1000];
for(int i=0; i<arr.size(); i++){
arr[i] = 'A';
}
其他回答
略带开玩笑的回答;写语句
array = initial_value
用你最喜欢的支持数组的语言(我的是Fortran,但还有很多其他语言),并将它链接到你的C代码。你可能想把它包装成一个外部函数。
你可以像上面详细描述的那样做整个静态初始化器的事情,但是当你的数组大小发生变化时(当你的数组变大时,如果你没有添加适当的额外初始化器,你就会得到垃圾),这可能是一个真正的麻烦。
Memset为您的工作提供了一个运行时命中,但是任何正确的代码大小命中都不受数组大小变化的影响。当数组大于几十个元素时,我几乎在所有情况下都会使用这个解决方案。
如果静态声明数组真的很重要,我会写一个程序来为我编写程序,并使其成为构建过程的一部分。
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...
以防数组的大小发生变化。
如果你想确保数组的每个成员都被显式初始化,只需从声明中省略维度:
int myArray[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
编译器将从初始化列表中推导出维度。不幸的是,对于多维数组,只有最外层的维度可能被省略:
int myPoints[][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
还可以,但是
int myPoints[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
不是。
如果数组恰好是int或int大小的任何东西,或者你的mempattern的大小恰好符合int的精确时间(即全部为零或0xA5A5A5A5),最好的方法是使用memset()。
否则,在循环中调用memcpy()移动索引。