如何在C语言中将数组的所有元素初始化为零并将第一个元素初始化为1

3

当声明为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;
}

如何使数组元素在初始化时除了第一个元素以外都为零?


5
这句话的意思是:“它会帮助你。”后面的网址链接到一个关于如何将数组元素全部设置为0的问题页面。 - Sathish
你的问题改变了吗?无论如何,以下@sourav的回答都适用于你。 - venki
1个回答

2
数组元素的初始化遵循C标准中基于初始化列表的聚合类型初始化规则。
如果在大括号括起来的列表中提供的初始化程序数量少于聚合类型中元素的数量,那么聚合类型中剩余的元素将被初始化为具有static存储期间的值,即0的值。
引用C11,第§6.7.9章,初始化(强调是我的)

如果花括号括起来的列表中初始化程序比聚合类型中的元素或成员少,或者用于初始化已知大小数组的字符串字面量中字符数少于数组中的元素数,则剩余部分的聚合物应该隐式初始化为与具有静态存储持续时间的对象相同。

关于具有static存储期的变量的初始化,

[...] 如果未显式初始化具有静态或线程存储期的对象,则:

  • [...]
  • 如果它具有算术类型,则将其初始化为(正或无符号)零;
  • [...]
所以,在你的情况下,这么做非常正确。
  int arr[10]={1};

arr[0] 的值为 1arr[1]arr[9] 都被设置为 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接