渐渐的, 多了一份来自岁月的顺从与敬意;
慢慢的, 多了一份来自生活的从容与淡然.
目录
9. 数组
9.1 数组的定义
定义: 一组相同类型元素的集合.
9.2 数组的分类
9.2.1 一维数组
(1) 一维数组的创建
数组创建, [ ] 中要给一个常量才可以, 不可以使用变量.
(2) 一维数组的初始化
指在创建数组的同时给数组中内容赋予一些和的初始值, 即数组的初始化, 例如: int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
(3) 一维数组的使用
- 使用下标来访问, 下标是从 0 开始的;
- 下标引用操作符 [ ];
- 数组的大小可以通过计算得到.
(4) 一维数组在内存中的存储
结论: 一维数组在内存中是连续存储的.
9.2.2 二维数组
(1) 二维数组的创建
- int arr[3][4];
- int arr[][4];
- 一般形式: 类型说明符 数组名 [常量表达式][常量表达式];
(2) 二维数组的初始化
- 分行给二维数组赋初值.
例如: int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
- 可以将所有的数据写在一个花括号内, 按数组元素在内存中的排列顺序对各元素赋初值.
例如: int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
- 可以对部分元素赋初值.
例如: int a[3][4] = {{1}, {0, 6}, {2, 3, 4}};
等价于int a[3][4] = {1, 0, 0, 0, 0, 6, 0, 0, 2, 3, 4, 0};
- 如果对全部元素赋初值 (即使提供全部数据), 则定义数组时对第一维的长度介意不指定, 但是第二维的长度一定不能省略.
例如: int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
(3) 二维数组的使用
二维数组的使用也是通过下标的方式来操作的.
(4) 二维数组在内存中的存储
结论: 二维数组在内存中的存储是连续存储的.
9.2.3 字符数组
(1) 字符数组的定义
用来存放字符数据的数组即为字符数组.
(2) 字符数组的初始化
如果在定义字符数组时不进行初始化, 则数组中各元素的值是不可预料的;
如果花括号中提供的初值个数 (即字符个数) 大于数组长度, 则出现语法错误;
如果初值个数小于数组长度, 则只将这些字符赋给数组中前面那些元素, 其余的元素自动定位空字符;
如果提供的初值个数与预定的数组长度相同, 在定义数组时可省略数组长度, 系统会自动根据初值个数确定数组长度.
(3) 字符串和字符串结束的标志
- C系统在使用字符数组存储字符串常量时会自动加一个 ‘\0’ 作为结束符;
- ‘\0’ 代表ASCII码为 0 的字符, 用它来作为字符串结束标志不会产生附加的操作或增加有效字符, 只起到一个供辨别的标志.
- 字符数组并不要求它的最后一个字符为 ‘\0’, 甚至可以不包含 ‘\0’.
9.2.4 数组作为函数的参数
- 数组传参, 如果函数内部需要知道数组元素的个数, 应该在函数外部算出元素个数, 以参数的形式传递给函数;
- 数组作为函数参数的时候, 不会把整个数组传递过去, 实际上只是把数组的首元素地址传递过去了, int arr[ ]表示的是int* arr.