0

我正在用 C++ 编写一个程序,我试图用值声明一个数组,但只有这个值被设置为数组中的第一个成员。

char mines[100][100] = {'0'};
4

5 回答 5

2

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*100sizeof(mines).

于 2012-07-17T14:09:00.883 回答
2

如果您不想编写或生成 10000 个元素的初始化列表,您可以这样做:

char mines[100][100];
memset(mines, '0', sizeof(mines));
于 2012-07-17T14:09:19.337 回答
0

我通常使用 for 循环来初始化所有值。据我所知,您只能通过列表进行初始化,而不是所有元素的默认值。

于 2012-07-17T14:07:00.720 回答
0

你只会通过做初始化第一个元素

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';
于 2012-07-17T14:10:38.457 回答
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 提供了最佳解决方案。

于 2012-07-17T14:44:19.113 回答