与数组相关

本文详细介绍了C语言中数组的一维创建与初始化、元素操作、内存布局,包括数组的下标规则、二维数组的创建与初始化方法,以及变长数组的概念。同时讨论了二分查找在有序数组中的应用。
摘要由CSDN通过智能技术生成

概念:存放一个或多个类型相同的数据

数组在内存中是连续存放的且随着下标的增长,地址是由小(低)到大(高)变化的

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;

               

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值