数组:
什么是数组:相同类型变量的组合,是一种批量定义变量的方式
定义:
类型 数组名[数量];
int arr[5];
使用:
使用下标表示数组中的变量
arr[下标];
下标:从零开始 ,范围:0~数量-1
arr[0],arr[1],arr[2],arr[3],arr[4]
遍历:
一般与for配合,使用循环变量i当做数组的下标
初始化:
int arr[数量] = {1,2,3,4,5...};
1、数组与普通变量一样,默认值是随机的,因此为了安全起见数组也需要初始化
2、只允许逐个初始化、赋值,不能整体初始化、赋值
3、大括号初始化语句只能在初始化时使用,其它地方都不能这样赋值
4、初始化的数据过多,编译器会产生警告并丢弃超出部分
5、初始化的数据不够,编译器会自动补0
6、初始化时数组的长度可以省略,编译器会自动统计数据的个数,然后作为数组的长度告
诉数组
7、不能同时省略长度和初始值,否则数组不会生成
sizeof(arr)/sizeof(arr[0]) == 数组的长度
sizeof(数组名):数组的总字节数
数组越界:不检查数组下标是否合法,为了程序更高的运算效率
数组越界的后果:
1、一切正常
2、段错误
3、脏数据
注意:数组越界不一定会当场出现问题,但是问题一定存在,可能在后面爆发,所以要注
意不要越界
二维数组:
一维数组可以看成把变量排成一排,通过编号访问
二维数组相当于把变量排成一个矩阵,通过行号和列号访问
定义:
类型 数组名[行数][列数];
int a[3][5];
使用:数组名[行下标][列下标];
行下标:0~行数-1
列下标:0~列数-1
遍历:一般需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列
for(int i=0;i<行数;i++){
for(int j=0;j<列数;j++){
printf("%d",arr[i][j]);
}
printf("\n");
}
初始化:
类型 数组名[行数][列数]={{第一行},{第二行},{第三行}};
变长数组:
定义数组时,使用变量作为数组的长度,这种叫做变长数组
由于编译期间变长数组的长度还不确定,只有当运行到数组的定义语句时,它的长度才真正
的确定下来,而且确定后不能改变
优点:可以根据实际情况确定数组的长度,从而达到节约内存的目的
缺点:不能使用初始化语法,只能循环赋值
注意:无论什么数组,一旦数组的长度确定后,本次运行过程中都不能发生变化