【问题标题】:Initialize a 2D-array at declarationtime in the C programming language在 C 编程语言的声明时初始化一个二维数组
【发布时间】:2009-11-06 16:34:18
【问题描述】:

如何在声明时用 0 初始化二维数组?

double myArray[3][12] = ?

【问题讨论】:

    标签: c arrays


    【解决方案1】:
    double myArray[3][12] = {0};
    

    或者,如果您想避免 gcc 警告“在初始化程序周围缺少大括号”(警告出现在 -Wall 或更具体地说是 -Wmissing-braces

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

    【讨论】:

    • 如果你使用段落代码块(行首有四个空格)你会得到语法高亮,如果你使用内联块(反引号)你不会。
    • 此语法是C99 还是更高版本?
    • @Danijel:{0} 初始化程序自 C89(第一个标准化)以来一直有效。之前不知道。
    【解决方案2】:

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

    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 } };
    

    【讨论】:

    • +1 用于指出如何初始化所有内容……但是为什么要缩短数组? :P
    • 我缩短了数组,因为我不想输入十二组数字。
    • 您可以考虑在第二个示例中使用非方形数组,以便清楚哪个维度是内部维度,哪个维度是外部维度
    【解决方案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
    

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

    这个question (c initialization of a normal array with one default value)有更多信息

    【讨论】:

    • 空的初始化器是无效的C(我相信它是有效的C++)。
    • @pmg 或@codyschafer,任何人都可以指出你的任何一个论点的标准吗?使用={ } 进行初始化似乎在 gcc 和 g++ 中都有效,但我不知道它是否正确。
    • @GrimFandango:C11 syntax for initialization 不允许 空初始化器C99 也是如此)。如果您使用 gcc,请尝试 gcc -std=c11 -pedantic ... 否则 gcc ...gcc -std=gnu11 ... 相同
    • @GrimFandango:比较 C11 6.7.9(我之前评论中的链接)和 C++14 8.5.1(抱歉,没有链接)
    【解决方案4】:

    内存布局可能是相关的(例如,用于序列化)。

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

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

    【讨论】:

      【解决方案5】:

      我觉得会

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

      【讨论】:

        【解决方案6】:

        你可以使用

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2022-01-09
            • 1970-01-01
            • 2012-07-12
            • 2021-04-04
            • 1970-01-01
            • 1970-01-01
            • 2019-08-19
            • 2017-07-06
            • 1970-01-01
            相关资源
            最近更新 更多