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

Chr*_*_45 25 c arrays

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

double myArray[3][12] = ?

pmg*_*pmg 37

double myArray[3][12] = {0};
Run Code Online (Sandbox Code Playgroud)

或者,如果你想避免gcc警告"在初始化程序周围丢失大括号"(警告出现-Wall或更具体地说-Wmissing-braces)

double myArray[3][12] = {{0}};
Run Code Online (Sandbox Code Playgroud)


JSB*_*ոգչ 14

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

double myArray[3][12] = { 0 };
Run Code Online (Sandbox Code Playgroud)

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

double myArray[3][3] = { { 0.1, 0.2, 0.3 }, { 1.1, 1.2, 1.3 }, { 2.1, 2.2, 2.3 } };
Run Code Online (Sandbox Code Playgroud)

  • 我缩短了数组,因为我不想输入十二组数字. (13认同)
  • 您可以考虑在第二个示例中使用非方形数组,以便清楚哪个维度是内部维度,哪个维度是外部维度 (2认同)

小智 9

然而,pmg的方法是正确的

double myArray[3][12] = {{}};
Run Code Online (Sandbox Code Playgroud)

会给出相同的结果.

另外,请记住

double myArray[3][12] = {{some_number}};
Run Code Online (Sandbox Code Playgroud)

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

例如,如果我要说

double myArray[2][3] = {{3.1}};
Run Code Online (Sandbox Code Playgroud)

数组不会满3.1,相反它会

3.1  0.0  0.0
0.0  0.0  0.0
Run Code Online (Sandbox Code Playgroud)

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

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


Rai*_*d62 5

@JSB????想出了用实际值初始化的语法,它与问题的标题完美匹配,这使我来到这里(我对索引的顺序感兴趣)。

myArray[3][2] = { { 0.1, 0.2 }, { 1.1, 1.2 }, { 2.1, 2.2 } };
Run Code Online (Sandbox Code Playgroud)

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