为何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,提问作者한태준
相关产品推荐
相关产品推荐

