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

C语言两种数组初始化方式下未显式赋值元素的取值差异问题

C语言数组下标4取值差异原因

核心规则依据

C语言标准对数组初始化有明确规定:

  • 数组定义时提供的初始化列表长度小于数组总长度时,所有未被显式赋值的剩余元素会被自动初始化为对应类型的零值(int类型对应值为0)。
  • 数组定义时未提供任何初始化列表时,所有元素默认处于未初始化状态,存储的是对应内存地址上遗留的随机垃圾值,访问这类值属于未定义行为。

对应代码场景分析

  • 针对arr3[5] = {1,2,3,4}:
    初始化列表只有4个初始值,数量少于数组的5个元素长度,因此下标为4的第5个元素会被编译器自动填充为0,打印结果固定为0。
  • 针对arr2[5]:
    定义时没有配置任何初始化列表,仅后续手动给下标0到3的元素赋值,下标为4的元素从未被赋值,保留了栈内存的原有垃圾值。你看到的-858993460是Windows平台下VS/VC编译器调试模式给未初始化栈空间统一填充的0xCCCCCCCC标记对应的int十进制值,不同编译环境、运行场景下这个值会随机变化。

注意

访问未初始化的变量属于C标准定义的未定义行为,实际开发中建议所有数组定义时完成初始化,或者显式给所有需要访问的元素赋值,避免出现不可预期的运行结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:03