[英]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] = {'/'};
只有一个数组元素被初始化为'/'
,其余元素被初始化为零。 您可以通过以下方法解决此问题:
使用memset
设置所有元素的值。
memset(&array[0][0], '/', sizeof(array));
使用for
循环初始化每个成员。
for (int i = 0; i < 10; ++i ) for (int j = 0; j < 10; ++j ) array[i][j] = '/';
使用std::fill
填充数据
std::fill(std::begin(array[0]), std::end(array[9]), '/');
要么
std::fill(std::begin(*std::begin(array)), std::end(*std::end(array)), '/');
使用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.