使用char初始化多维数组?

时间:2015-03-10 16:39:42

标签: c++ arrays multidimensional-array

我想用'/'初始化一个10x10的字符数组。 这就是我所做的:

char array[10][10] = {'/'}

但结果是一个1'/'的数组,其他都是空格......

为什么使用int数组工作而不使用字符? 如果我写:

int array[10][10] = {0}

结果是一个满为0的数组。

提前感谢您的回答! :)

3 个答案:

答案 0 :(得分:1)

根据C ++标准* 8.5.1聚合)

  

7如果列表中的initializer-clause数量少于   聚合中的成员,然后每个成员未明确初始化   应从其支撑或等于初始化器初始化,或者如果有的话   没有大括号或大小正相合,来自空的初始化列表   (8.5.4)。

和(8.5.4列表初始化)

  

- 否则,如果初始化列表没有元素,对象就是   值初始化。

和(8.5初始化程序)

  

- 如果T是数组类型,则每个元素都是值初始化的; -   否则,该对象为零初始化

因此在这两个定义中

char array[10][10] = {'/'}
int array[10][10] = {0}

所有没有相应初始化程序的元素都是初始化的值,对于基础类型意味着零初始化。除阵列的第一个元素之外的所有元素都将设置为零。这意味着你的例子中的两个数组“以相同的方式”工作。:)

答案 1 :(得分:1)

使用时:

char array[10][10] = {'/'};

只有一个数组元素初始化为'/',其余数据初始化为零。您可以通过以下方式解决此问题:

  1. 使用memset设置所有元素的值。

    memset(&array[0][0], '/', sizeof(array));
    
  2. 使用for循环初始化每个成员。

    for (int i = 0; i < 10; ++i )
       for (int j = 0; j < 10; ++j )
          array[i][j] = '/';
    
  3. 使用std::fill填充数据

    std::fill(std::begin(array[0]), std::end(array[9]), '/');
    

    std::fill(std::begin(*std::begin(array)), std::end(*std::end(array)), '/');
    
  4. 使用std::vector代替数组。

    std::vector<std::vector<char>> array(10, std::vector(10, '/'));
    

答案 2 :(得分:0)

您可以使用std::fill

std::fill( &array[0][0], &array[0][0] + sizeof(array), '/' );