数组

初窥门径

我在计算天数,和计算位数的md中都接触了数组
包括可汗大点兵中的数组
所记下来的笔记:

问题:

int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
​ 和
​ int count[10] = { 0 };
​ 这两个数组用法有什么不同,这个[]里面和{}的区别与联系

回答:

1. 本质区别
  1. days_in_month[] 的特点
    • 数组初始化时明确指定了每个元素的值 {31, 28, ..., 31},共 12 个元素。
    • 数组声明时 [] 内未写长度,编译器会根据初始化列表中元素的数量(12 个)自动推断数组长度为 12。
    • 用途是存储每个月的天数(非闰年),元素值是预先确定的固定值。
  2. count[10] = {0} 的特点
    • 数组声明时 [] 内明确指定了长度为 10,即数组有 10 个元素。
    • 初始化列表只给了一个值 0,根据 C 语言规则:未明确初始化的元素会被自动赋为 0 (对于全局 / 静态数组)或默认值(局部数组未初始化时是随机值,但这里显式初始化了第一个元素,其余会被补 0)。
    • 用途通常是作为计数器,初始化为全 0 方便后续累加。
2. 联系
  • 两者配合使用完成数组的声明与初始化:类型 数组名[长度] = {初始化值};
  • [] 省略长度时,{} 中元素的数量直接决定数组的长度(如 days_in_month{} 中有 12 个值,故长度为 12)。
  • [] 指定长度时,{} 中值的数量可以少于该长度,未指定的元素会被自动初始化(数值型数组补 0,字符数组补 '\0' 等)。

总结

  • [] 负责定义数组的长度(容量),{} 负责给数组元素赋初始值。
  • days_in_month[] 依赖 {} 中的元素数量确定长度,且所有元素都显式初始化;count[10] = {0} 明确指定了长度,仅显式初始化第一个元素,其余自动补 0。