use*_*460 1 c++ arrays initialization
要初始化2D数组,通常我们可以这样做:
int matrix[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} };
Run Code Online (Sandbox Code Playgroud)
但是,当我使用各种组合对其进行测试时,以下代码确实编译出了我的期望:
int matrix[3][4] = {1,2,3,4,5,6,7};
Run Code Online (Sandbox Code Playgroud)
当我以2D表格形式打印输出时,我得到:
1,2,3,4,
5,6,7,0,
0,0,0,0,
Run Code Online (Sandbox Code Playgroud)
我明白为什么剩下的值都是零.
我的问题是:这是通过假设超过行数的数字总是"流"到下一行来初始化2D数组的合法方法之一吗?或者这是我在C++中应该避免的另一个陷阱?
小智 6
是的,这很好.引用非官方的cppreference:
嵌套初始化程序列表周围的大括号可以省略(省略),在这种情况下,必要时使用许多初始化子句来初始化相应子集合的每个成员或元素,后续的初始化子句用于初始化以下成员.宾语.
和:
如果初始化程序子句的数量小于成员数或初始化程序列表完全为空,则其余成员由空列表初始化,这将执行值初始化.
初始化的值将其int设置为0.