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

C语言局部数组变量初始化:指定首元素为1其余是否默认置0?属标准还是编译器定义行为?

局部数组部分初始化的行为说明

可以保证该数组首元素被设为1,其余元素均被设为0,这是C标准明确规定的行为,不属于编译器定义行为。

在C语言的标准规则中,当对数组进行部分初始化时,未被显式赋值的元素会被自动初始化为对应类型的零值:

  • 对于整数类型(包括uint16_t这类无符号整数),零值就是0;
  • 对于指针类型,零值是空指针;
  • 对于结构体等复合类型,会递归地将每个成员初始化为对应零值。

对应到给出的代码:

#include <stdint.h>

int main () {
    uint16_t arr[10] = {1};
}

数组arr的第一个元素被显式赋值为1,剩下的9个元素都会被标准强制初始化为0,所有符合C标准的编译器都会遵循这个规则,结果是确定的。

内容的提问来源于stack exchange,提问作者unalignedmemoryaccess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:06