黑马程序员技术交流社区

标题: iOS基础班-数组 [打印本页]

作者: TGII    时间: 2016-5-25 00:12
标题: iOS基础班-数组
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. 行列带丢失的解决方案
•        让调用者将二维数组作为参数传递时,需要提供行数与列数

作者: deepindo    时间: 2016-5-25 01:08
看来是同学了,过来顶一下下
作者: monkey001    时间: 2016-5-25 09:41
好的,顶一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2