You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带间隙的静态数组初始化及未指定元素置零的C标准依据查询

带间隙的静态数组初始化及未指定元素置零的C标准依据查询

你说的这种通过指定下标初始化静态数组,没被明确赋值的元素自动置零的行为,在C标准里有明确的规定,我帮你把对应的核心条款整理出来了,不用再到处翻文档啦:

先确认你给出的这段代码的行为完全符合标准:

static int arr[] = {
   [1] = 1,
   [10] = 2,
   [5] = 3
};

这段代码确实会创建一个大小为11的int数组,下标0、2-4、6-9的元素都会被自动初始化为0。

对应的C标准条款(从C99开始引入该规则,C11、C17等后续版本均延续):

  • 未指定元素的初始化规则:在*C11标准的6.7.9节(初始化)*的第19条中明确规定:对于静态存储期的聚合类型对象(比如数组),如果初始化列表中没有显式初始化某些元素,那么这些元素会被自动初始化为算术类型的零,或者指针类型的空指针值。你的数组是static(静态存储期),所以未被指定的元素自然会被置零。
  • 数组大小的确定规则:同样在*C11标准的6.7.9节(初始化)*的第22条中规定:当数组声明使用[]且带有指定初始化器时,数组的大小会被设置为初始化列表中出现的最大下标值加1,所以这里最大下标是10,数组大小就是11。

备注:内容来源于stack exchange,提问作者White Owl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:38:01