【问题标题】:How all the elements of array initialize to zero and first element to 1 in c [duplicate]数组的所有元素如何在c中初始化为零并将第一个元素初始化为1 [重复]
【发布时间】:2015-11-11 04:31:27
【问题描述】:

这是当声明为 int arr[10]={1} 时数组自动初始化为零和第一个元素初始化为 1 的程序

#include<stdio.h>

int main()
{
    int i;
    int arr[10]={1};
    for(i=0;i<10;i++)
    {
        printf("\n%d",arr[i]);
    }
return 0;
}

除了第一个元素之外,如何将数组元素初始化为零?

【问题讨论】:

标签: c arrays initialization


【解决方案1】:

数组元素根据 C 标准中指定的带有初始化列表的聚合类型的初始化规则进行初始化。

它提到,如果在大括号括起来的列表中提供的初始化器数量少于聚合类型中元素的数量,则聚合类型中的 剩余 元素将被初始化为该值就像它们具有static 存储持续时间一样,即值为 0。

引用C11,第 §6.7.9 章,初始化(强调我的)

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

关于具有static 存储持续时间的变量的初始化,

[..] 如果具有静态或线程存储持续时间的对象未初始化 明确地,那么:

  • [...]
  • 如果它具有算术类型,则将其初始化为(正或无符号)零;
  • [...]

所以,在你的情况下,非常正确

  int arr[10]={1};

arr[0] 的值是 1,arr[1] 到 arr[9] 都设置为 0。

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2017-05-30
    • 2020-09-29
    • 1970-01-01
    • 2020-08-26
    • 2019-10-17
    相关资源
    最近更新 更多