我想用'/'初始化一个10x10的字符数组。 这就是我所做的:
char array[10][10] = {'/'}
但结果是一个1'/'的数组,其他都是空格......
为什么使用int数组工作而不使用字符? 如果我写:
int array[10][10] = {0}
结果是一个满为0的数组。
提前感谢您的回答! :)
答案 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] = {'/'};
只有一个数组元素初始化为'/'
,其余数据初始化为零。您可以通过以下方式解决此问题:
使用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, '/'));
答案 2 :(得分:0)
您可以使用std::fill
std::fill( &array[0][0], &array[0][0] + sizeof(array), '/' );