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

为何C语言中int arr[123] = {-1};未将数组所有元素初始化为-1?

问题解析:数组初始化仅首元素为-1、其余为0的原因

在C语言中,int arr[123] = {-1};这种初始化方式的行为是仅第一个元素被显式赋值为-1,剩余未被显式初始化的元素会被自动初始化为0——这是C标准明确规定的规则,和编译器转换负数完全无关。

核心规则说明

C语言数组初始化的关键规则:

  • 当初始化列表中的元素数量少于数组总长度时,所有未被显式赋值的元素会触发默认初始化
  • 对于int这类基本数值类型,默认初始化的结果就是0

所以你的代码里,arr[0]的值是-1,而arr[1]到arr[122]全部都是0,这就是你用printf输出看到0的原因。

全数组赋值的正确方式

如果你想让数组所有元素都为-1,用for循环逐个赋值是完全可靠的做法:

int arr[123];
for (int i = 0; i < 123; i++) {
    arr[i] = -1;
}

另外也可以使用memset函数(需包含<string.h>),注意memset是按字节赋值的,只有当目标值的每个字节都相同时才能正确作用于int类型,-1的补码形式刚好满足这个条件:

#include <string.h>
int arr[123];
memset(arr, -1, sizeof(arr));

内容的提问来源于stack exchange,提问作者한태준

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:58:09