使用C编程语言在声明时初始化2D数组

当我声明它时,如何用0s初始化2D数组?

double myArray[3][12] = ?

 double myArray[3][12] = {0}; 

或者,如果你想避免gcc警告“在初始化程序周围丢失大括号”(警告显示为-Wall或更具体地说是-Wmissing-braces

 double myArray[3][12] = {{0}}; 

如果要使用零进行初始化,请执行以下操作:

 double myArray[3][12] = { 0 }; 

如果要填写实际值,可以嵌套大括号:

 double myArray[3][3] = { { 0.1, 0.2, 0.3 }, { 1.1, 1.2, 1.3 }, { 2.1, 2.2, 2.3 } }; 

然而,pmg的方法是正确的

 double myArray[3][12] = {{}}; 

会给出相同的结果。

另外,请记住

 double myArray[3][12] = {{some_number}}; 

只有当some_number为零时才会按预期工作。

例如,如果我要说

 double myArray[2][3] = {{3.1}}; 

数组不会满3.1,相反它将是

 3.1 0.0 0.0 0.0 0.0 0.0 

(第一个元素是唯一一个设置为指定值,其余元素设置为零)

这个问题(c初始化具有一个默认值的普通数组)有更多信息

@JSBձոգչ提出了用实际值初始化的语法,它完全匹配问题的标题,这使我在这里(我对索引的顺序感兴趣)。

 myArray[3][2] = { { 0.1, 0.2 }, { 1.1, 1.2 }, { 2.1, 2.2 } }; 

第一个索引是行索引是最慢的索引。 这被称为C阶而不是F(Fortran)阶。

我认为这将是

 double myArray[3][12] = {0} 

你可以用

 double myArray[3][12] = { 0 }; 

要么

 double myArray[3][12]; memset(myArray, 0, sizeof(double) * 3 * 12); 

pmg的方法效果最好,因为它适用于如果你部分初始化任何数组,其余部分得到默认值零的概念。 否则,你可以将数组声明为全局变量,并且在未初始化时,数组元素将自动设置为默认值(取决于编译器)为零。