- 定义
1)<类型>变量名称[元素数量];
int grades[100];//名称为grades的数组有100个int型的单元
double weight[20];//名称为weight的数组有20个double型的单元
2)元素的数量必须是整数
3)C99之前:元素数量必须是编译时刻确定的字面量(常数)
- 特点
1)是一种容器
2)其中所有的元素具有相同的数据类型
3)一旦创建,不能改变大小
4)*(数组中的元素在内存中是连续依次排列的)
int a[10]
//一个int的数组
//10个单元:a[0],a[1],a[2],...,a[9]
//每个单元就是一个int类型的变量
//可以出现在赋值的左边或右边: a[2]=a[1]+6; “=”左边读、右边写
//*在赋值左边叫左值,右边叫右值
- 单元
1)数组的每一个单元就是数组类型的一个变量
2)使用数组时放在[ ]中的数字叫做下标或索引,下标从0开始计数
grades[0]
grades[99]
average[5]
3)有效的下标范围:[0,数组的大小 - 1]
segmentation fault:下标越界
存在长度为0的数组 int a[0] ,但是无用
数组运算
- 集成初始化
int a[] ={2,4,6,7,1,3,5,9,11,13,23,14,32};
得出数组大小
- 大小
1)sizeof给出整个数组所占据的内容的大小,单位是字节
sizeof(a)/sizeof(a[0])
2)sizeof(a[0])给出数组中单个元素的大小,相除就得到了数组的单元个数
3)若修改数组中的初始数据,不需要修改遍历的代码
- 赋值
1)数组变量本身不能被赋值
2)要把一个数组的所有元素交给另一个数组,必须采用遍历
for( i=0; i<length; i++){
b[i] = a[i];
}
- 遍历数组
1)通常使用for循环,循环变量i从0到<数组的长度,循环体内最大的i正好是数组最大的有效下标
2)常见错误:
a.循环结束条件是<=数组长度
b.离开循环后,继续用i的值来做数组元素的下标
3)数组作为函数的参数时,必须再用另一个参数来传入数组的大小:
a.不能在[ ]中给出数组的大小
b.不能再利用sizeof来计算数组的元素个数
- 二维数组
int a[3][5];//a是一个3行5列的矩阵
1)遍历
for ( i=0; i<3; i++ ){ //行号遍历
for ( j=0; j<5; j++){ //列号遍历
a[i][j] = i*j;
}
}
a.a[i][j]是一个int
b.表示第i行第j列上的单元
2)初始化
int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6};
};
a.列数必须是给出的,行数可以由编译器来数
b.每行一个{ },逗号分隔
c.最后逗号可以存在
d.如果省略,可以补零
e.可以用定位(*C99 ONLY)