使用 char 初始化多维数组
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), '/' );
相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理