定义数组
<类型>变量名称[元素数量];
int grades[100];
double weight[20];
元素数量必须是整数
C99之前:元素数量必须是编译时刻确定的字面量
是一种容器(放东西的东西),特点是:
其中所有的元素具有相同的数据类型;一旦创建,不能改变大小
*(数组中的元素在内存中是连续依次排列的)
int a[]
一个 int 的数组
10个单元:a[0],a[1],...,a[9]
每个单元就是一个 int 类型的变量
可以出现在复制的左边或右边
a[2] = a[1] + 6;
* 在赋值左边的叫做左值
数组的单元
数组的每个单元就是数组类型的一个变量
使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数
有效的下标范围
编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
segmentation fault
但是也可能运气好,没造成严重的后果
所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小-1]
集成初始化的定位
用[]在初始化数据中给出定位
没有定位的数据接在前面的位置后面
其他位置的值补零
也可以不给出数组大小,让编译器算
特别适合初始数据稀疏的数组
数组的大小
sizeof给出整个数组所占据的内容的大小,单位是字节
sizeof(a)/sizeof(a[0])
sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数
这样的代码,一旦修改数组中初始的数据,不需要修改遍历的代码
数组的赋值
数组变量本身不能被赋值
要把一个数组的所有元素交给另外一个数组,必须采用遍历
遍历数组
使用 for 循环,让循环变量 i 从 0 到 < 数组的长度,这样循环体内最大的 i 正好是数组最大的有效下标
常见的错误是:
循环结束条件是 <= 数组长度
离开循环后,继续使用 i 的值来做数组元素的下标
数组作为函数的参数时:
不能再[] 中给出数组的大小
不能再利用 sezeof 来计算数组的元素个数