数组就是变量的集合,是一个批量定义变量的方法。
一维数组
一维数组的定义方式如下:
类型 数组[数量];//[]里的整数表示变量的数量
int arr[5] <=> int n1,n2,n3,n4,n5;
数组的变量值也是不确定的,为了安全需要初始化
使用方法:
数组名[编号];//[]里的整数表示的是编号
arr[0],arr[1],arr[2],arr[3],arr[4];
编号也叫下标,范围:0~数量-1
遍历:
配合循环语句,使用循环变量当做数组的编号
for(int i = 0;i < 5;i++)
{
printf("%d",arr[i]);
}
*初始化:
类型 数组[数量] = {v0,v2,v3,...}
数组越界:
1、C语言中数组可以越界,没有语法错误(不能检查,也不想检查)。
2、 数组越界使用时访问的是它之后的内存(可能是其它变量,也可能是其它数组,也可能是无主的,也可能属于操作系统)
数组越界的后果:
1、产生脏数据。
2、一切正常。
3、段错误|(核心已转储)。
二维数组:
把变量排成一个方阵
定义:
类型 数组名[行数][列数];
int arr[3][4] = {
[][][][],
[][][][],
[][][][]
}
使用:
数组名[行编号][列编号];
编号从零开始
遍历:
配合双层for,外层循环负责遍历行,内层循环负责遍历列
for(int i =0;i<3;i++){
for(int j=0;i<4;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
初始化:
数组名[行编号][列编号] = {{v0,v1,v2},{v0,v1,v2},{v0,v1,v2}};
变长数组:
数组的长度在编译时可以不确定在运行期间根据实际情况进行计算,当执行到数组定义语句是,就必须确定下来,不能再改变。
-
优点:可以根据实际情况确定数组的长度,达到节约内存的目的
-
缺点:不能初始化