如何将数组的所有元素初始化为零,并将第一个元素初始化为1

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

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

如何将数组元素初始化为零,期望第一个元素?

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

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

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

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

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

[..]如果没有显式初始化具有静态或线程存储持续时间的对象,则:

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

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

  int arr[10]={1}; 

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