第六篇目录第六篇3.数组3.1一维数组3.数组3.1一维数组3.1.1一维数组的创建与初始化a例如int arr1[20];表示创建了名为arr1的数组里面有20个元素a初始化可能遇到的情况b就个人习惯来说使用 arr[ ]初始化数组是最好的选择3.1.2字符串与字符数组a)通过监视功能可以查看数组中各元素的情况b可以发现第一种初始化方式在数组末尾会有\0字符作为终止标志他们之间的差别可以在sizeof与strlen之中体现如下3.1.3 sizeof与strlen的对比a在以上案例中 strlen能够直接识别 ‘ \0’ 前面所有的字符个数sizeof则是返回arr[10]在内存中开辟的10字节的空间也就是也将填充的 ‘\0’ 所占内存也一起算进去了b不难察觉如果数组中间本身包含一个 ‘\0’ 那么统计会提前终止c同时也会引发其他问题在没有 ‘\0’ 的时候strlen如何停止d可见会直接读到数组之外直到正好在数组之外遇到 ‘\0 才会停止3.1.4数组类型3.1.5一维数组的使用3.1.5.1数组下标a通过使用 [ ] 可以实现对数组的修改遍历查看等功能例如int arr1[10]{1,2,3,4,5,6,7,8,9,10};int arr[3]33;printf(第3个元素%darr[2]);3.1.5.2数组遍历a当遍历的数据范围超过了数组范围就会造成越界访问3.1.5.3给数组输入内容3.1.5.4 sizeof计算数组元素个数a例如以下b求数组元素个数采用数组内存大小/单个元素内存大小的出常用于for循环3.1.5.5一维数组在内存中的存储如图a通过对数组元素取地址的方式可以得出数组元素的存储位置b不难发现数组元素在内存中的存储是连续的相差4个字节c地址存储为16进制存储十六进制的数有123456789a(10),b(11).c(12),d(13),e(14),f(15);3.1.5.6一维数组练习a分析结合一维数组的性质我们可以在两个数组中分别存放想要打印的内容通过循环的方式将#数组中前与后的元素依次替换为想要得到的数组并打印每次变化后的结果就可实现具体如下b其中涉及1Sleep用于暂停程序的执行2system(cls);用于清屏可以将输出的内容全部清空需使用windows.h头文件3.1.5.7二分法查找例如在一个数组中查找一个元素是否在这个数组之中大部分情况使用遍历逐个查询但是对于升序/降序这种数组可以使用二分法查找比如代码实现a解析设置左右标志right和left,每进行一次查找都会取一个中间值当大于查找值时将中间值作为最大值后继续前面的操作小于时同理直到左右及中间值等于该查找值时进行打印输出没查到即输出没查到b这个做法的好处是能够节约遍历成本每次遍历的长度减少一半c局限是只能用于升降序数组但是可以先利用方法将数组排序再使用此方法但排序的时候已经可以完成查找的所以该方法不常用