|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2016-12-4 09:51:49
|
显示全部楼层
第四十七节: 二维数组。
【47.1 二维数组的书写格式和特点。】
拿一维数组和二维数组来对比一下,一维数组只有一个下标,像由很多点连成的一条直线,整体给人的是一种“线”的观感。而二维数组有两个下标,这两个下标类似平面中的行与列,也类似平面中的X轴和Y轴的坐标,通过y轴和x轴坐标就可以找到所需的点,也就是二维数组的某个元素,因此,二维数组整体给人的是一种“面”的观感。
上述是对二维数组的感性描述,二维数组是由一维数组发展而来,所以继承了很多一维数组的特点。二维数组的所有“网点”元素的地址都是挨个相临的,先从第0行开始“扫描”当前行的列,第0行第0列,第0行第1列,第0行第2列......再第1行第0列,第1行第1列,第1行第2列......再第2行......再第N行,上一行“尾”元素跟下一行“头”元素的地址也是相临连续的。
二维数组未带初始化时的通用定义格式如下:
比如:
- unsigned char a[2][3]; //此处的2代表有2行,3代表有3列。
复制代码
分析:此二维数组定义了6个变量,跟一维数组一样,下标都是从0开始,到(N-1)时结束,此处的N代表行数或者列数。所以a[2][3]数组的元素挨个分别是a[0][0],a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]这6个变量。这6个变量的地址是顺序挨个相连的。
二维数组有两种常用初始化格式,一种是逐行初始化,一种是整体初始化。
第一种逐行初始化:
- unsigned char a[2][3]=
- {
- {0,1,2},
- {3,4,5}
- };
复制代码
在逐行初始化定义二维数组时,只要有初始化的数据,也可以省略行下标,但是列下标不能省略,比如:
- unsigned char a[][3]=
- {
- {0,1,2},
- {3,4,5}
- };
复制代码
此时编译器会根据元素的个数来确定行数是多少。
第二种整体初始化,跟一维数组一样,内部数据元素不需要额外增加大括号来分行。
- unsigned char a[2][3]=
- {
- 0,1,2,3,4,5
- };
复制代码
或者
- unsigned char a[2][3]=
- {
- 0,1,2,
- 3,4,5
- };
复制代码
都行。
C语言是很丰富的语言,比如二维数组还允许不完全初始化的一些情况,这种情况我就不再深入讲解,我讲解的都是挑选一些针对以后单片机项目中可能会经常用到的语法。
二维数组我在很多项目上还是经常用到的,比如用在一些需要把所得的信息进行查表判断的项目,在每一行里放一条关键词字符串信息,利用循环语句进行逐行查找匹配信息。至于二维数组如何存放字符串的知识点以后再讲。这节的重点是让大家对二维数组有个初步的认识。
【47.2 例程练习和分析。】
现在编写一个程序来熟悉一下二维数组的书写和使用格式。
程序代码如下:
- /*---C语言学习区域的开始。-----------------------------------------------*/
- unsigned char a[2][3]= //定义和初始化一个二维数组
- {
- {0,1,2},
- {3,4,5}
- };
- void main() //主函数
- {
- a[0][0]=8; //故意把第0行第0列的这个变量赋值8,让大家看看如何直接操作二维数组某个元素。
- View(a[0][0]); //把第1个数a[0][0]发送到电脑端的串口助手软件上观察。
- View(a[0][1]); //把第2个数a[0][1]发送到电脑端的串口助手软件上观察。
- View(a[0][2]); //把第3个数a[0][2]发送到电脑端的串口助手软件上观察。
- View(a[1][0]); //把第4个数a[1][0]发送到电脑端的串口助手软件上观察。
- View(a[1][1]); //把第5个数a[1][1]发送到电脑端的串口助手软件上观察。
- View(a[1][2]); //把第6个数a[1][2]发送到电脑端的串口助手软件上观察。
- while(1)
- {
- }
- }
- /*---C语言学习区域的结束。-----------------------------------------------*/
复制代码
在电脑串口助手软件上观察到的程序执行现象如下:
- 开始...
- 第1个数
- 十进制:8
- 十六进制:8
- 二进制:1000
- 第2个数
- 十进制:1
- 十六进制:1
- 二进制:1
- 第3个数
- 十进制:2
- 十六进制:2
- 二进制:10
- 第4个数
- 十进制:3
- 十六进制:3
- 二进制:11
- 第5个数
- 十进制:4
- 十六进制:4
- 二进制:100
- 第6个数
- 十进制:5
- 十六进制:5
- 二进制:101
复制代码
分析:
变量元素a[0][0]为8。从原来定义的0变成8,因为被main函数里的第1行代码赋值了8。
变量元素a[0][1]为1。
变量元素a[0][2]为2。
变量元素a[1][0]为3。
变量元素a[1][1]为4。
变量元素a[1][2]为5。
【47.3 如何在单片机上练习本章节C语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C语言学习区域”的代码就可以了,其它部分的代码不要动。编译后,把程序下载进带串口的51学习板,通过电脑端的串口助手软件就可以观察到不同的变量数值,详细方法请看第十一节内容。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|