数组
概念说明
数组是一组连续存放的同类型元素。 它特别适合保存成绩、温度、坐标、字符序列这类“数量固定或可预估”的同类数据。
数组最关键的两个特征是:
- 元素类型相同。
- 内存连续排列。
这也是为什么数组访问效率高,但长度管理相对死板。 普通数组一旦定义,长度通常就固定下来了;如果想插入、删除或扩容,往往需要自己移动元素或重新分配空间。
语法/规则
- 一维数组定义形式是
类型 数组名[元素个数];。 - 数组初始化可以写成
int nums[3] = {1, 2, 3};,也可以省略长度让编译器推断。 - 数组下标从
0开始,到长度 - 1结束。 - 在定义数组的同一作用域内,常见长度写法是
sizeof(arr) / sizeof(arr[0])。 - 数组名在很多表达式中会退化为首元素指针,但数组和指针并不是完全等价的东西。
- 普通数组不会自动扩容,也不会自动检查越界。
- 查找、统计、排序这类算法题,通常都会以数组为基础数据结构。
示例
| |
输出结果:
| |
常见错误
- 把数组长度和最后一个下标混淆,例如长度为 5 却访问
scores[5]。 - 以为数组会像高级语言容器一样自动扩容,结果直接写出了越界访问。
- 在函数里用
sizeof(arr)计算传入数组长度,忘了它往往已经退化成指针。 - 插入或删除元素时只改了长度变量,却没有真正移动后续元素。
- 只验证中间位置的数据,没有专门检查第一个元素和最后一个元素的边界。