声明一个带有值的数组

时间:2012-07-17 14:04:05

标签: c++ multidimensional-array initialization

我正在用C ++编写程序,我正在尝试使用值声明一个数组,但只将此值设置为数组中的第一个成员。

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

5 个答案:

答案 0 :(得分: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*100替换为sizeof(mines)

答案 1 :(得分:2)

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

char mines[100][100];
memset(mines, '0', sizeof(mines));

答案 2 :(得分:0)

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

答案 3 :(得分: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';

答案 4 :(得分:0)

Luna,这被称为零初始化器,只能将所有值初始化为零对应的值:空指针,零。如果你尝试将char初始化为0它将起作用,但是任何其他值都不会。

更多信息here

#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的最佳解决方案。