从单片机基础到程序框架(全集 2019pdf版).pdf - 第197页
第四十七节: 二维数组。 【47.1 二维数组的书写格式和特点。 】 拿一维数组 和二维数组 来对比一下, 一维数组只 有一个下标 , 像由很多点连成的一条 直线, 整体给人的 是一种“线” 的观感。而 二维数组有两 个下标 ,这两个下标 类似平面中的 行与列,也类 似平面 中的 X 轴和 Y 轴的坐标, 通过 y 轴和 x 轴坐 标就可以找到 所需的点 , 也就是二维数组 的某个 元素, 因此, 二维数组整 体给 人的是一种“ 面”的…

十六进制:C
二进制:1100
分析:
变量元素 x[0]为 25。
变量元素 x[1]为 26。
变量元素 x[2]为 28。
变量元素 y[0]为 10。
变量元素 y[1]为 11。
变量元素 y[2]为 12。
【46.5 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第四十七节: 二维数组。
【47.1 二维数组的书写格式和特点。】
拿一维数组和二维数组来对比一下,一维数组只有一个下标,像由很多点连成的一条直线,整体给人的
是一种“线”的观感。而二维数组有两个下标,这两个下标类似平面中的行与列,也类似平面中的 X 轴和 Y
轴的坐标,通过 y 轴和 x 轴坐标就可以找到所需的点,也就是二维数组的某个元素,因此,二维数组整体给
人的是一种“面”的观感。
上述是对二维数组的感性描述,二维数组是由一维数组发展而来,所以继承了很多一维数组的特点。二
维数组的所有“网点”元素的地址都是挨个相临的,先从第 0 行开始“扫描”当前行的列,第 0 行第 0 列,
第 0 行第 1 列,第 0 行第 2 列......再第 1 行第 0 列,第 1 行第 1 列,第 1 行第 2 列......再第 2 行......
再第 N 行,上一行“尾”元素跟下一行“头”元素的地址也是相临连续的。
二维数组未带初始化时的通用定义格式如下:
数据类型 数组名[行数 Y][列数 X];
比如:
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 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下: