数组的单元
·数组的每个单元就是数组类型的一个变量
·使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数:
·grades[0] grades[99] average[5]
有效的下标范围
●编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
●一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
●segmentation fault
但是也可能运气好,没造成严重的后果
●所以这是程序员的责任来保证程序只使用有效的下标值: [0,数组的大小- 1]
长度为0的数组存在但无用 int a[0]
数组的集成初始化
int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
·直接用大括号给出数组的所有元素的初始值,不需要给出数组的大小,编译器替你数数
数组的大小
sizeof给出整个数组所占据的内容的大小,单位是字节
●sizeof(a[0])给出 数组中单个元素的大小,于是相除就得到了数组的单元个数
●这样的代码,一旦修改数组中初始的数据,不需要修改遍历的代码
二维数组
int a[3][5]; 通常理解为a是一个3行5列的矩阵
a[0][0] | a[0][1] | a[0][2] | a[0][3] | a[0][4] |
a[1][0] | a[1][1] | a[1][2] | a[1][3] | a[1][4] |
a[2][0] | a[2][1] | a[2][2] | a[2][3] | a[2][4] |
二维数组的遍历:
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
a[i][j]=i*j;
}
a[i][j]是一个int,表示第i行第j列上的单元
二维数组的初始化
int a[][5]={
{0,1,2,3,4},
{2,3,4,5,6},
};
●列数是必须给出的,行数可以由编译器来数
●每行一个{},逗号分隔.
●最后的逗号可以存在,有古老的传统.
●如果省略,表示补零
●也可以用定位( * C99 ONLY)