|
楼主 |
发表于 2015-11-9 00:43:25
|
显示全部楼层
第四十五节:二维数组。
上一节讲一维数组时漏讲了一个知识点,一维数组在定义时,如果预先给它填写若干个初始化的数据,也可以省略中括号[N]里面的元素个数N,这样编译器在编译时会根据初始化的个数来自动识别和定义此一维数组实际元素个数。比如:
unsigned char y[3]={10,11,12};
跟
unsigned char y[]={10,11,12};
的意义是一样的。注意,省略元素个数时必须要有初始化的数据,否则编译器不知道此数组的长度可能导致编译出错。
继续回到本节的内容,二维数组。一维数组只有一个下标,像由很多点连成的一条直线,而二维数组有两个下标,布下了一行行的点像一张矩形的网,它的两个下标分别代表了行和列,行和列又像我们所学的y轴和x轴坐标,通过y轴和x轴坐标就可以找到所需的点,也就是数组的某个元素。
上述是对二维数组的感性描述,二维数组是由一维数组发展而来,所以具备了很多一维数组的特点。二维数组的所有”网点”元素的地址都是挨个相临的,先第0行,再第1行,再第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个变量。
二维数组有两种常用初始化格式,一种是逐行初始化,一种是整体初始化。
第一种逐行初始化:
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语言是很自由很丰富的语言,比如二维数组还允许不完全初始化的一些情况,我就不再深入讲解,我讲解的都是挑选一些针对以后单片机项目中可能会经常用到的语法。
二维数组我在很多项目上还是经常用到的,比如用在一些需要把所得的信息进行查表判断的项目,在每一行里放一条关键词字符串信息,利用循环语句进行逐行查找匹配。至于二维数组如何存放字符串的知识点以后再讲。这节的重点是让大家对二维数组有个初步的认识。
现在编写一个程序来熟悉一下二维数组的书写和使用格式。最后把程序编译后下载到坚鸿51学习板观察结果。请直接复制第十节模板程序,修改的main程序代码如下:
- void main() //主程序
- {
- /*---C语言学习区域的开始---------------------------------------------------------------------------*/
-
- unsigned char a[2][3]= //定义和初始化一个二维数组
- {
- {0,1,2},
- {3,4,5}
- };
-
- GuiWdData0=a[0][0]; //把a[0][0]这个元素变量放到窗口变量0里面显示
- GuiWdData1=a[0][1]; //把a[0][1]这个元素变量放到窗口变量1里面显示
- GuiWdData2=a[0][2]; //把a[0][2]这个元素变量放到窗口变量2里面显示
- GuiWdData3=a[1][0]; //把a[1][0]这个元素变量放到窗口变量3里面显示
- GuiWdData4=a[1][1]; //把a[1][1]这个元素变量放到窗口变量4里面显示
- GuiWdData5=a[1][2]; //把a[1][2]这个元素变量放到窗口变量5里面显示
-
- /*---C语言学习区域的结束---------------------------------------------------------------------------*/
- while(1)
- {
- initial();
- key_service();
- display_service();
- }
- }
复制代码
查看运算结果的方法。如何在坚鸿51学习板上观察变量?按下S1或者S5按键即可切换显示不同的窗口,从而显示不同的变量。按下S9按键不松手就可以切换到十六进制的显示界面,松开手后会自动切换到十进制的界面。16个LED灯显示的就是当前变量的二进制数,亮代表1,灭代表0。上坚鸿51学习板观察程序执行的结果如下:
变量元素a[0][0]为0。
变量元素a[0][1]为1。
变量元素a[0][2]为2。
变量元素a[1][0]为3。
变量元素a[1][1]为4。
变量元素a[1][2]为5。
下节预告:while循环语句。
(未完待续)
|
|