联系方式:单片机开发第六讲:C51的数组1-2北京源智天下科技有限公司联系方式:课程安排•数组的声明和表示•初始化数组元素•一维数组•二维数组•多维数组1-3北京源智天下科技有限公司联系方式:数组的声明和表示•数组是把相同数据类型的变量,按照顺序组织起来的一个集合。•数组中的单个变量称为数组元素。•数组从结构上来说是一种构造类型或者聚合类型。•数组的分类方法。1-4北京源智天下科技有限公司联系方式:数组的声明和表示•在C51语言中使用数组之前需要先声明。•声明数组的一般形式如下:–类型说明符数组名[常量表达式];•注意:C51中不支持动态分配数组大小。1-5北京源智天下科技有限公司联系方式:数组的声明和表示•数组只是一个集合,数组中的元素才是我们真正操作的对象。•数组元素的表示一般采用数组名加下标的方法,如下所示:–数组名[下标]•下标表示了元素在数组中的顺序号。•下标可以为整型常量、整型变量或整型表达式。1-6北京源智天下科技有限公司联系方式:初始化数组元素•初始化数组元素就是为数组中的各个元素赋初始值。•初始化数组元素可以采用两种方法:–在声明数组时初始化–动态初始化1-7北京源智天下科技有限公司联系方式:在声明数组时初始化•这种方式是指在数组声明的时候给数组元素赋予初值。•在声明数组时初始化赋值,是在程序编译阶段进行的,这样不占用程序运行时间,可以提高效率。•声明数组时初始化赋值数组元素,可以采用如下几种形式:–完整声明初始化–部分初始化–省略数组大小1-8北京源智天下科技有限公司联系方式:动态初始化•动态初始化也就是在声明数组的时候不指定元素的初始值,而在程序运行中通过赋值语句来动态为其赋值。01#includestdio.h//头文件02voidmain()//主函数03{04inti,num[4];//定义整型变量i和整型数组num05printf(请输入4个整数\n);//打印说明字符06for(i=0;i4;i++)//循环输入数组num中的元素07{08scanf(%d,&num[i]);09}10for(i=0;i4;i++)//循环输出数组num中的元素11{12printf(num[%d]=%d,i,num[i]);13}14}1-9北京源智天下科技有限公司联系方式:一维数组•一维数组跟一维空间有点类似,就是只有一个下标标号的数组。•在C51语言中,一维数组的一般的声明形式如下:–类型说明符数组名[常量表达式];–类型说明符数组名[常量表达式]={值,值,…,值};•数组由连续的存储单元组成,如下图所示。数组名[0]数组名[1]……数组名[n-1]……数值数值数值1-10北京源智天下科技有限公司联系方式:一维数组的引用•在使用时不能直接用数组名,因为其表示的不是数组元素。•如果直接引用数组名,则表示的该数组中第一个元素的地址,而不是数组元素的值。01#includestdio.h//头文件02voidFun(inta[5])//自定义函数03{04inti;05for(i=0;i5;i++)06{07printf(a[%d]=%d\r\n,a[i]);//输出数组元素08}09}10voidmain()//主函数11{12intch[5];13inti;14for(i=0;i5;i++)//数组初始化15{16ch[i]=i;17}18Fun(ch);//函数调用,实参是数组名19}1-11北京源智天下科技有限公司联系方式:一维字符串数组•在C51语言中,用char标识的是字符数组。•字符串数组则是一类特殊的字符数组。•字符串数组的构成,如下图所示。数组名[0]数组名[1]……数组名[n-1]……数值数值数值\0数组名[n]1-12北京源智天下科技有限公司联系方式:二维数组•二维数组便是包含两个维度的数组。•二维数组的声明形式如下:–类型说明符数组名[常量表达式1][常量表达式2];1-13北京源智天下科技有限公司联系方式:二维数组的初始化•初始化二维数组元素可以采用两种方法:–在声明数组时初始化–动态初始化1-14北京源智天下科技有限公司联系方式:在声明数组时初始化•在声明数组的时候初始化二维数组,这样初始化过程不占用程序运行时间,大大提高了程序的效率。•在声明数组时初始化赋值数组元素,可以采用如下几种形式:–按行完整声明初始化–按顺序完整声明初始化–部分初始化1-15北京源智天下科技有限公司联系方式:动态初始化•动态初始化也就是在声明二维数组的时候不指定元素的初始值,而在程序运行中通过赋值语句来动态为其赋值。01#includestdio.h//头文件02voidmain()//主函数03{04intt,i,ch[3][4];//定义变量和二维整型数组05for(t=0;t3;++t)//两重循环为ch赋值06for(i=0;i4;++i)07ch[t][i]=(t*4)+i+1;08for(t=0;t3;++t)//循环,用于判断输出09for(i=0;i4;++i)10{11if(ch[t][i]%3==0)//判断元素值是否能被3整除12printf(ch[%d][%d]=%d\n,t,i,ch[t][i]);//输出该元素13}14}1-16北京源智天下科技有限公司联系方式:二维数组的内存分配•二维数组在单片机中是按照连续的存储单元来存放的。num[0][0]num[0][1]num[0][2]num[0][3]num[1][0]num[1][10]num[1][2]num[1][3]num[2][0]num[2][1]num[2][2]num[2][3]列下标0~3行下标0~301#includestdio.h//头文件02voidmain()//主函数03{04intt,i,num[3][4];//定义整型二维数组05for(t=0;t3;++t)//循环为其中的元素赋值06for(i=0;i4;++i)07num[t][i]=(t*4)+i+1;08}1-17北京源智天下科技有限公司联系方式:二维字符串数组•二维字符串数组就是专门用于存放字符串的二维数组。•二维字符串数组的定义形式如下:–char数组名[常量表达式1][常量表达式2];•二维字符串数组中对字符串的使用服从符合一维字符串数组的使用规则。•对于二维字符串数组,必须在声明时指定其大小。1-18北京源智天下科技有限公司联系方式:多维数组•多维数组由二维数组扩展而来,是指数组的维数大于2的数组。•多维数组的一般声明形式如下:–类型说明符数组名[常量表达式1][常量表达式2]…[常量表达式n]•多维数组占用很多资源,在程序设计时,应尽量少使用多维数组。联系方式:北京源智天下科技有限公司性格决定命运,专注成就人生源智天下