【问题标题】:Array initialization C数组初始化 C
【发布时间】:2013-05-01 03:29:40
【问题描述】:

这个初始化是什么意思:

char arr[10] = { 0, };

我熟悉 char arr[10] = {0}; 将所有元素设置为零,char arr[10] = {1,2}; 将前两个元素设置为 1 和 2 (ascii),其余为 0。 我不熟悉上面的格式。 快速测试表明它可能就像char arr[10] = {0};,但还有其他我不知道的含义吗?

【问题讨论】:

标签: c arrays


【解决方案1】:

来自How to initialize all members of an array to the same value?

将所有成员初始化为相同的值:

int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };

缺失值的元素会被初始化为0:

int myArray[10] = { 1, 2 }; //initialize to 1,2,0,0,0...

所以这会将所有元素初始化为 0:

int myArray[10] = { 0 }; //all elements 0

在 C++ 中,一个空的初始化列表也会将每个元素初始化为 0:

int myArray[10] = {}; //all elements 0 in C++

如果没有指定初始化器,具有静态存储持续时间的对象将初始化为 0:

static int myArray[10]; //all elements 0

如果您的编译器是 GCC,您可以使用以下语法:

int array[1024] = {[0 ... 1023] = 5};
int A[10] = {[0 ... 4] = 5, [5 ... 9] = 3};

【讨论】:

    【解决方案2】:

    是的,它等同于不带逗号的版本。

    有关尾随逗号的更多讨论,请参阅this question

    【讨论】:

      【解决方案3】:

      标准

      A trailing comma may appear after the last expression in an array initializer and is ignored

      【讨论】:

      • 请提供标准链接(一个小的 google 请求显示此行引用自 Java 标准)。
      【解决方案4】:

      char arr[10] = { 0, };char arr[10] = {0} 在这种情况下是相同的。

      char arr[10] = {5, } 不同。 5 将存储在 a[0] 中,剩余的将用 0 填充。

      我建议不要将它用于全局变量,因为它会增加数据段的大小。

      【讨论】:

        【解决方案5】:

        int arr[3] ={0,};int arr[3] ={0}; 之间没有区别。

        参考:C11 6.7.9:

            initializer:
                 assignment-expression
                 { initializer-list }
                 { initializer-list , }
        

        这两种形式的初始化器列表都被认为是初始化器。许多人更喜欢末尾带有逗号的表单,因为它可以在代码维护期间更轻松地重新排列或添加元素到列表中。

         int arr[3] ={0,}; 
        

        声明一个包含三个元素的数组并将第一个元素初始化为 0。当您进行部分初始化时,数组的其余部分会自动初始化为零。

        参考。 C11 6.7.9:

        如果大括号括起来的列表中的初始值设定项比那里少 是聚合的元素或成员,或 用于初始化已知大小的数组的字符串文字 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间。

        [我为另一个question 写了这个答案,但它被关闭了。不过我喜欢这个答案,所以我重新发布了原来的问题。]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-21
          • 2018-01-15
          • 2013-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多