繁体   English   中英

用字符初始化多维数组?

[英]initialize multidimensional array with a char?

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

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

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

为什么用int数组起作用而用char不能起作用? 如果我写:

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

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

预先感谢您的回答! :)

根据C ++标准* 8.5.1汇总)

7如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员应从其花括号或相等初始化器初始化,或者,如果没有花括号或相等初始化器, 则从空的初始化程序列表 (8.5.4)。

和(8.5.4列表初始化)

—否则,如果初始化列表中没有元素,则该对象将被值初始化。

和(8.5个初始化器)

—如果T是数组类型,则每个元素都进行值初始化; —否则, 将对象初始化为零

因此,在这两个定义中

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

所有没有相应初始化程序的元素都将进行值初始化,对于基本类型而言,这意味着初始化为零。 除数组的第一个元素外的所有元素都将设置为零。 这意味着示例中的两个数组都以相同的方式“工作”。

使用时:

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, '/')); 

您可以使用std::fill

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM