单片机的C语言中数组的用法_第1页
单片机的C语言中数组的用法_第2页
单片机的C语言中数组的用法_第3页
单片机的C语言中数组的用法_第4页
单片机的C语言中数组的用法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。 引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,C51以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在 语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。(1 )一维数组一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。用以下例程说明数组的建立、数据操作:#in elude /*此程序用以说明数组的建立、数据操作*/Unsigned char array10;/定义一个有 10个单元的数组

2、void mai n()Unsigned char i;for(i=0;i<10;i+) arrayi=i; /用下标调用数组中的元素/* array |9|8|7|6|5|4|3|2|1|0| 90*/ while(1);数组名是用来表示数组的标识,其实它是数组的首地址,即一个指针。不过它所表示的地址是固定的,不能改动。如前几章所述的相关内容,array2与*(array+2) 是等效的,不过不能用array+,因为array是常量。上面的程序中的数组是静态建立的,以下例程来用说明数组的动态建立。#in elude #in elude /*此程序用以说明数组的动态建立*/ un sig

3、 ned char *p array;void mai n() lun sig ned char i;parray=(unsigned char *)malloc(10); / 动态创建一个数组for(i=0;iv10;i+) |parrayi=i; /向数组中赋值 free( parray); / 释放数组while(1);字符串是数组的一个重要特例。它的每个单元的数据均为字符类型(char),最后一个单元为'0'(0x00),用来表示字符串的结束。C51函数库中提供了专门对字符串进行处理的函数,用以下例程说明:#in clude #in clude /*此程序用以说明字符串

4、*/Char S戶y,a'h','o','o','0';/定义一个字符串,并对它进行初始化,以0'结束void mai n()char s_temp 10;Strcpy(s temp,s);/strcpy位于 string.h 头文件中,实现字符拷贝/s为一个常量,不能S+ btrcpy(s_temp,"yahoo");/ 与上面的语句等效while(1);以下列出几种字符串的灵活用法,希望能够帮助读者深入了解字符串:#in clude #in clude /*此程序用以说明字符串的灵活运用*/ /*此

5、函数从字符串s中提取第n个子串,子串间由,'分隔返回指向该子串的指针*/ char *get_sub_stri ng(char *s, un sig ned char n) int i;i nt d=O;i nt fore=0;|in t le n=strle n(s);for(i=0;i<le n;i+) if(si=',') si='O'd+;if(d=n)return s+foG else fore=i+1;Ireturn NULIl void mai n() Un sig ned char c;char stri ng20;c="

6、yahoo"2; /c='h'卜正如前面所述,字符串是由字符串的首地址来表示的字符串"yahoo"其实就是它的首地址,那就可以这样来取其中的某个字符:"yahoo"2*/strc py(stri ng,"123,234,345,456");Strcpy (stri ng,get_sub_stn ng(stn ng,2);while(1);(2)二维数组可由两个下标确定元素的数组就称为二维数组。其定义的一般形式为:类型说明符 数组名常量表达式1常量表达式2 例如:int array64;定义了一个二维数组arr

7、ay,有6行4列,共24个元素。两个方括号中的常量表达1与常量表达式2规定了数组的行数与列数,从而确定了数组中的元素个数。行下标从 0开始,最大为5,共6行;列下标也从0开始,最大为3,共4列。数组中共有6X4=24个元素,具体如下表示:array00array01array02array03array10array11array12array13array20array21array22array23array30array31array32array33array40array41array42array43array50array51array52array53实际使用时,可以把上述二维

8、数组看作一个 6行4列的矩阵,是一个平面的二维 结构。那么编译程序是如何用一维的存储空间给这样一个二维结构分配连续的存储单元的呢C51采用按行存放的方法,即在内存中先存放第 0行元素,再存放 第1行、第2行、.元素,每行中先存放第0列,接着存放第1列、第2列、的元素。#in clude #in clude /*此程序用以说明二维数组的使用方法*/void mai n()un sig ned char arrays33=1,2,3,2,3,4,3,4,5;/定义一个3行3列的二维数组,其它在内存中还是以一维的方式存储/用下面的方式就可以知道这一点un sig ned char testtest=

9、( (un sig ned char *)arrays)6;/test=3/将二维数据的首地址强制转为一维数组,按照一维数组的方式访问它 while(1);除了一维数组、二维数组,其实可以定义任何维的数组,多维数组用来表示由多个下标才能决定的量。例如:int arrays333表示数组arrays为一个三维数组,对应于三维存储模型。其实单片机内的存储器是一维的,即所有数据都是依次顺序存储的,所以无论几维数组都由编译程序抽象出数组到单片机存储的实际的一维数组映射。#in clude/*void mai n()un sig ned char test un sig ned char arrays222=1,2,2,3,3,4,4,5;test=arrays110;/test=4while(1);(3)结构数组多个结构变量也可以构成结构数组,其定义方法与定义结构变量完全相同。如下例:#in elude /*此程序用以说明结构数组*/ typ edef struct li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论