C语言-数组
数组的定义
数组:是一种容器,可以同时用来存储同种数据类型的多个值
数组的定义格式:
数组的初始化;定义数组的时候,第一次给数组赋值.
1. 定义数组存储5个学生的年龄,并初始化
int studentAges[5] = {18, 19, 20, 17, 18};
或者不指定数组长度,让编译器自动计算:
int studentAges[] = {18, 19, 20, 17, 18}; // 数组长度自动确定为5
2. 定义数组存储女朋友的身高,并初始化
对于存储身高的数组,可以使用浮点类型(如float
或double
)来定义:
float girlfriendHeights[] = {165.5, 168.2, 170.0, 163.7, 167.3};
或者指定数组长度:
float girlfriendHeights[5] = {165.5, 168.2, 170.0, 163.7, 167.3};
数组中的元素的访问
索引:索引就是数组的编号,也叫角标,下标,编号
特点:从0开始,连续+1,不间断
数组元素的获取:数组名[索引]
然后用变量接收;int num = 数组名[索引];
数组元素的修改:数组名[索引]=xxx;
数组的遍历
数组常见的两个小问题
问题①:数组作为函数的参数进行传递
问题②:数组的索引越界
数组作为函数的参数进行传递
接下来由我写出来一个案例帮大家理解第一个问题:
这是一个错误的代码演示,他的运行结果和我们预想的不是一样的,他这段代码理论上来说是可以通过函数便利数组的,但是最后只便利了两个数,在下图是代码,下下图是结果
那么这究竟是怎么一回事呢?
根据上面的点,我们可以知道,数组作为函数的参数进行传递,传递的只是函数的首地址,也就是最后在函数中用用int len=sizeof(数组)/sizeof(数组[0])
算出来的是八个字节,因为此时数组是地址,没有看懂的可以去了解一下黑马的c语言的p100集
了解了问题的来源,我们如何解决呢?
很简单,既然在函数内部传入的数组是首地址,那么我们在函数外部计算数组长度len就可以了
函数的索引越界
索引越界是指程序试图访问数组、列表、字符串等序列类型数据结构中不存在的索引位置。在大多数编程语言中,当访问超出有效范围的索引时,会抛出异常或错误。
若发生越界不会报错,但会导致数据错乱,因此只需按指定长度访问即可,无需额外演示。
数组练习1-求最值
需求:已知数组元素为{33,5,22,44,55}
请找出数组中最大值并打印在控制台
数组联系2-遍历数组并求和
基础版
升级版
数组练习3-反转数组
数组常见算法--基本查找
很简单的算法,通过order函数遍历数组,如果数组中的数等于我们查找的数,那就输出此时遍历数组时候的序号
数组常见算法--二分查找/折半查找
二分查找的前提条件;
这是二分查找的算法,原理就是我们猜数字对半猜的原理,由于我们不知道到底要猜多少次,因此我们使用while循环,然后我们定义0号位为最小值,最右边的为最大值,定义中间的位置为中间值mid,通过mid与我们查找的值比较,mid大了就把max变成mid-1,然后改变mid继续比较,最后mid总会与num相同,这样我们就能实现查找num序号的功能,通过这个功能,我们可以实现万级数据的快速查找。
数组常见算法--插值查找
差值查找就是二分查找的优化