前言
前面已经掌握了数组、字符串基础,今天学习 C 语言的二维数组,分为二维整型数组与二维字符数组。
二维整型数组可以用来存储表格、矩阵数据;二维字符数组专门用来存放多条字符串。在嵌入式开发当中,可以用来保存多组传感器数据、多条提示文本,在 LCD 屏幕、串口打印中经常使用。
一、二维整型数组
1. 定义格式
c |
示例:
c |
书写顺序:行在前,列在后。 |
2. 二维数组访问
格式:数组名[行下标][列下标]
- 行下标范围:0 ~ 行数‑1
- 列下标范围:0 ~ 列数‑1
⚠️下标同样不能越界,越界会造成内存破坏,嵌入式程序会出现死机、乱码等诡异问题。 |
3. 二维数组初始化
①全部初始化
c |
带括号按行初始化时,行数可以省略,列数绝对不能省略。 |
②局部初始化
没有被初始化的元素,系统自动赋值为 0。
c |
③全部元素初始化为 0
c |
4. 利用 sizeof 计算二维数组的行数、列数
以int a[3][4];举例
c |
计算行数、列数通用公式
c |
示例:
c |
5. 二维整型数组存储特点
特性 | 说明 |
单一性 | 整个数组存储的数据类型完全相同,例如全部为 int |
有序性 | 下标有序,a[0][0]、a[0][1]依次排列 |
连续性 | 内存中按行优先连续存放,先存完第 0 行,再存第 1 行,依次向后 |
内存排布顺序:a[0][0] → a[0][1] → a[0][2] → a[0][3] → a[1][0] → a[1][1] …… |
二、二维字符型数组
作用:专门用来保存多个字符串。 |
1. 定义格式
c |
示例:
c |
- 行数:代表一共可以存放多少条字符串
- 列数:代表每一条字符串最大允许的字符长度(包含 '\0' 结束符)
2. 二维字符数组初始化
①全部初始化为 0
c |
②局部初始化,写入多条字符串
两种等价写法:
c |
3. 二维字符数组输入输出
二维字符数组操作多条字符串,需要搭配for 循环。
⚠️注意:gets()函数不安全,仅作语法学习,实际嵌入式项目尽量规避。 |
输入示例代码:
c |
关键点:str[i]就等价于第 i 个字符串的首地址,不需要再加[]第二个下标。 |
今日学习总结
1. 二维数组定义格式数组名[行数][列数],列数永远不能省略,初始化的时候行数可以省略;
2. 内存按行优先连续存储,可以利用sizeof公式自动算出数组行数、列数,写通用代码很实用;
3. 局部初始化,未赋值的元素编译器自动填充 0;
4. 二维字符数组用于存放多条字符串;行数代表字符串数量,列数代表单条字符串最大长度;
5. 二维字符数组读写多条字符串,配合 for 循环,str[i]代表第 i 个字符串首地址;
6. 嵌入式开发场景:二维整型数组存多组传感器采样数据;二维字符数组存放多条提示文字,用于串口、LCD 屏幕显示。