当声明为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;
}
如何将数组元素初始化为零,期望第一个元素?
答案 0 :(得分:2)
根据C标准中指定的初始化列表的聚合类型的初始化规则初始化数组元素。
它提到,如果括号列表中提供的初始值设定项数少于聚合类型中元素数量的初始值设定项,则聚合类型中的剩余元素将初始化为该值好像具有static
存储持续时间,即值为0.
引用C11
,章节§6.7.9,初始化(强调我的)
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于元素在数组中,聚合的其余部分应与具有静态存储持续时间的对象隐式初始化。
关于具有static
存储持续时间的变量的初始化,
[..]如果没有初始化具有静态或线程存储持续时间的对象 明确地说:
- [...]
- 如果它有算术类型,则初始化为(正数或无符号)零;
- [...]
所以,非常正确,在你的情况下
int arr[10]={1};
arr[0]
的值为1
,arr[1]
至arr[9]
的所有值均设为0
。