我正在用 C++ 编写一个程序,我试图用值声明一个数组,但只有这个值被设置为数组中的第一个成员。
char mines[100][100] = {'0'};
我正在用 C++ 编写一个程序,我试图用值声明一个数组,但只有这个值被设置为数组中的第一个成员。
char mines[100][100] = {'0'};
std::fill
在每个维度上使用:
for (int i = 0; i < 100; ++i)
std::fill (mines[i], mines[i] + 100, '0');
或者在 C++11 中:
for (auto &chars : mines)
std::fill (std::begin (chars), std::end (chars), '0');
更简单的是,使用数组是连续的这一事实,您可以为自己节省循环:
std::fill (mines, mines + 100*100, '0');
正如 Shahbaz 指出的那样,要消除那里的幻数,请替换mines + 100*100
为sizeof(mines)
.
如果您不想编写或生成 10000 个元素的初始化列表,您可以这样做:
char mines[100][100];
memset(mines, '0', sizeof(mines));
我通常使用 for 循环来初始化所有值。据我所知,您只能通过列表进行初始化,而不是所有元素的默认值。
你只会通过做初始化第一个元素
char mines[100][100] = {'0'};
其余部分将使用0
(值而不是字符)初始化,您将需要一个循环。像这样:
int row, column;
for (row = 0; row < 100; row++)
for (column = 0; column < 100; column++)
mines[row][column] = '0';
Luna,这称为零初始化器,仅用于将所有值初始化为零对应值:空指针,零。如果您尝试将 char 初始化为 0 它将起作用,但对于任何其他值都不会。
更多信息在这里。
#include <iostream>
int main(int argc, char *argv[])
{
int value[2][2] = {0};
for(int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
std::cout << (value[i][j] == 0) << std::endl;
return 0;
}
输出:
1 1 1 1
如果您需要使用特定值进行初始化,我认为 Luchian 使用 memset 提供了最佳解决方案。