概念:存放一个或多个类型相同的数据
数组在内存中是连续存放的且随着下标的增长,地址是由小(低)到大(高)变化的
1.一维数组的创建和初始化
1.1一维数组的创建
type arr_name[常量值];----------int math[20]
存放在数组中的值被称为数组的元素,数组在创建时可以指定数组的大小和数组的元素类型
1.2数组的初始化-----------我们对数组进行初始化一般使用大括号,将数据放在大括号里面
初始化类型 1.完全初始化
int arr[5] = {1,2,3,4,5};
2.不完全初始化
int arr[6] = {1};-----------------第一个元素初始化为1,剩余的元素默认初始化为0
3.错误初始化---初始化项太多
int arr[3]={1,2,3,4};
2.一维数组的使用
2.1数组的下标------下标是从0开始的,如果数组有n个元素,则最后一个元素的下标是n-1.
如果我们要访问下标为6的元素我们就可以使用arr[6]--------在数组中是第七个元素
2.2数组元素的打印------我们使用for循环
2.3一维数组在内存中的存储
随着数组下标的增长,地址是由小到大变化的,两个相邻的元素之间的地址相差的是数组类型的字节数(如果type是interesting类型,则两个相邻的元素之间相差4)
3.计算数组元素个数----sizeof(计算类型或者变量的大小)
数组的元素个数*数组的类型的字节数
这里的40计算的是数组所占空间的总大小(字节)
计算数组的元素个数
这里的sizeof(arr[0])计算的是数组元素类型的字节数
3.二维数组的创建
type arr_name[常量值1][常量值2];-------------int arr[3][5]
表示行数 表示列数
3.1二维数组的初始化
类型 1.不完全初始化
int arr1[3][5]={1,2};
int arr2[3][5]={0};
2.完全初始化
int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
3.按照行初始化
int arr[3][5]={{1,2},{2,3},{3,4}};---------其余值默认初始化为0
数组初始化后还是可以改变输出的值
4.初始化省略行,但是不能省略列
int arr[][5]={1,2,3};
int arr[][5]={1,2,3,4,5,6};
二维数组的行下标和列下标都是从0开始的
二维数组中的每个元素都是连续存放的
4.变长数组
C99中给一个变长数组,允许我们可以使用变量指定数组大小
4.1变长数组不能初始化
4.2
变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行时,根据变量的大小来指定数组元素的个数,而不是数组的大小是可变的,数组的大小一旦确定就不能再变化了
5.
6.二分查找
也叫折半查找,查找的前提条件是数据是有序的
遍历数组
left是数组最左边的元素的下标--------0;
right是先计算出数组个数再减去一之后得到的,数组元素最右边元素的下标是数组元素总个数再减去一,因为是从0开始的
mid是二分查找找到的中间量,再用这个mid下标找到数组中对应的元素,再将这个元素和要找的元素k之间比较大小。如果找到的数比k大就让右下标减去一继续计算,相反就让左下标加上一,如果不满足left<=right则就是找不到的。
这里使用sizeof不用strlen是因为
sizeof------计算整个数组的字节数包括空格和\0;
strlen------获取字符串中有效字符的个数,不算\0;