1. 数组的概述
• 什么是数组?
o 用于存储相同数据类型,并具有相同意义的数据的容器.
• 数组的作用(什么时候用数组)
o 用于把同一类型的一组数据统一管理起来.
• 数组的特点
o 存储多个同种数据类型的数据
o 数组的个数是确定的
o 方便管理
• 怎么样声明数组
o 元素的数据类型 数组名[个数];
2. 数组在内存中是如何存取的?
• 具体的与变量的存储一致.
3. 如何存储数组数据?
• 数组中存储数据的是数组元素,而不是整个数组
• arr代表整个数组
4. 数组元素的赋值的注意事项
• 为元素赋值的时候,赋值的数据类型要保持一致,但数据类型不一致的时候,会有类型的自动转换.
• 下标不能够越界. 越界后,不在是数组元素,赋值可能导致程序的崩溃或系统崩溃
5. 数组数据的取出
• 单个取出数据: 数组名[下标];
o 如果下标越界,会打印随机值
• 遍历
o 格式:
♣ for(int i= 0; i < 数组长度; i++) {
⎥ printf(“%d\n”, 数组名[i]);
}
6. 数组长度的问题
• 数组长度的计算:
o 格式: sizeof(数组名) / sizeof(数组元素的数据类型)
• 注意事项
o 声明数组的时候,必须指定数组的长度
o 数组的长度可以是常量,变量,表达式,字符(ACSII)
o 数组的长度不能是小数,也不能是负数
o 数组长度可以是1,也可以是0;
o 数组长度也可以是宏定义,宏值必须是个整数.
7. 数组元素的默认值与初始化
• 默认值:
o 垃圾数
• 初始化
o 先声明数组,在逐个元素赋值.
o 声明的同时,就初始化数组元素 int arr[6] = {1,3,4,5,3,4};
♣ (这时,长度就不能是变量? 因为编译的时候,编译器无法确定数组的长度.这个时候赋值就可能出现越界所以为了保证一定不会出错.就干脆这种初始化的时候不允许使用变量.而可以使用宏定义.
o 第二种初始化的时候,可以省略长度. int arr[] = {1,3,4,5,3,4};
o 只为数组前面的数组元素赋值,而其他的为0:int arr[4] = {2,4};
♣ int arr[4] = {0};
o 指定下标的初始化. int arr[4] = {[1] = 9};
8. 数组的地址
• 数组的地址 = 数组下标为0的元素地址 = 组成数组的最低字节的数组
9. 数组作为函数的参数传递
• 什么是值传递
o 当数据类型为基本数据类型时;在函数执行完毕之后,实参的值没有改变,这就是值传递
• 什么是地址传递
o 当函数的参数是一个数组的时候,那么在传递的时候,传递的是实参数组的地址.所以形参数组指针指向了实参数组,这时,形参的数组指针实际操作的就是实参数组.这就叫地址传递
• 数组作为参数传递时,会遇到一个问题
o sizeof(参数数组名) = 8个字节,如果函数的参数是一个数组,并不会开辟一个数组空间,而是声明了一个用来存储数组地址的数组指针变量,而指针变量在内存中占8个字节,在传值的时候,把实参数组名传递进来.数组名代表了数组的地址.
o
• 如何解决这个问题了?
o 让调用者将数组长度传给函数.
10. 数组的应用场景
• 找到整型数组的最大值/最小值
• 数组元素的累加和/平均值
• 判断数组中是否包含指定元素(指定标签)
• 找到指定的元素在数组中第一次出现的下标/ 将所有的下标都遍历出来*****
• 冒泡与选择排序
• 不重复的随机数***** 明天早上的练习.(未解决)
11. 什么是二维数组?
• 相当于有行有列的excel表格来存储数据,由多个一维数组组成.
12. 二维数组的声明
• 特点:
o 具有两个下标-行与列
o 多个数据类型相同的元素
o 长度固定
o 方便管理
o
• 声明的格式:
o 元素类型 数组名[行][列]
13. 如何在二维数组中存储数据了呢?
• 与一维数组的类似.
14. 注意事项
• 真正存储数据的是表格中的每一个单元格
• 数据类型要一致,不一致,自动转换类型
• 行列下标不能够越界-越界就报错
15. 如何从二维数组中取出数据?
• 单个取出 数组名[行下标][列下标];
• 遍历(与一维数组有区别)
16. 数组长度的注意事项
• 声明二维数组的时候,必须指定行和列
• 其他的与一维数组一样
17. 元素的初始化与默认值
• 全部初始化
• 部分初始化
•
18. 二维数组的长度以及行列的计算
• 二维数组的长度
o len = sizeof(arr) / sizeof(int);
• 行数
o rows = sizeof(arr) / sizeof(arr[0]);
• 列数
o cols = sizeof(arr[0]) / sizeof(int);
19. 二维数组作为函数的参数
• 如果函数的参数是二维数组,实参调用也必须是二维数组.
• 当二维数组作为函数的参数的时候,会丢失二维数组的行列
• 当二维数组作为函数的参数时,行数可以省略不写,但列数不能省略.
20. 行列带丢失的解决方案
• 让调用者将二维数组作为参数传递时,需要提供行数与列数
|
|