数组函数指针_第1页
数组函数指针_第2页
数组函数指针_第3页
数组函数指针_第4页
数组函数指针_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

关于数组函数指针2一、数组数组:把具有相同数据类型的若干变量按有序的形式组织起来的集合。其中,数组中的单个变量称为数组元素。数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。按照数组元素所属的基本数据类型的不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。在C51语言中,数组可以是一维的,也可以是多维的。第2页,共25页,2024年2月25日,星期天3数组元素的表示:数组元素是组成数组的基本单元。在C51语言中,数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标]这里的下标只能为整型常量或整型表达式。例如,a[6]、a[i+j]、a[i++]都是合法的数组元素。数组元素通常也称为下标变量。在C51语言中必须先定义数组,才能使用下标变量。另外,程序中只能逐个地使用下标变量,而不能一次引用整个数组。第3页,共25页,2024年2月25日,星期天4数组元素的初始化赋值是指在数组声明的时候给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少程序运行时间,提高效率。数组元素初始化赋值的一般形式为:类型说明符数组名[常量表达式]={值,值……值};在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。示例如下:inta[10]={0,1,2,3,4,5,6,7,8,9};该语句相当于赋值语句a[0]=0,a[1]=1,…,a[9]=9。第4页,共25页,2024年2月25日,星期天51.一维数组一维数组的定义格式为:数据类型说明符[存储器类型]

数组名

[常量表达式];其中,数据类型说明数组中各元素的数据类型;存储器类型是可选项,它指出定义的数组所在的存储空间;数组名是整个数组的变量名;常量表达式说明了该数组的长度,即数组中元素的个数,常量表达式必须用方括号“[

]”括起来,而且其中不能含有变量。例如:charmath[60];//定义math数组为字符型,数组元素个数为60个。intcount[10]; //声明整型数组count,共10个元素。第5页,共25页,2024年2月25日,星期天6在C51语言中,一维数组的一般说明形式如下:类型说明符数组名[常量表达式];如果,在声明数组时就给数组进行初始化赋值,可以采用如下的形式:类型说明符数组名[常量表达式]={值,值,…,值};一维数组声明示例如下:inta[4]={1,2,3,4};//数组元素中的对应关系图第6页,共25页,2024年2月25日,星期天7字符数组:在C51语言中,字符串被定义为一个以空字符结束的字符数组。其中空字符以“\0”来标识,它一般是不显示的。因此,在程序中声明字符数组时,必须声明一个比要存的字符串多一个字符的数组,最后一位用来存空字符“\0”。例如,假如要定义一个存放长度为20的字符串的数组s,可以写成:chars[21];这样就给字符串末尾的空字符保留了空间。chara[]={“ZhongGuo”};chara[9]=“ZhongGuo”;第7页,共25页,2024年2月25日,星期天82.二维数组定义多维数组时,只要在数组名后面增加相应于维数的常量表达式即可。二维数组的定义格式为: 数据类型[存储器类型]数组名[常量表达式1][常量表达式2];

例:intch[10][20];该语句声明ch为(10,20)的二维整型数组,其有10行20列,共200个元素。和其他大多数计算机语言不同的是,C51不使用逗号区分下标,而是用方括号将各维下标括起。另外,数组的二维下标均从0计算。例如,要存取数组ch中下标为(3,5)的元素可以写成:ch[3][5]第8页,共25页,2024年2月25日,星期天9二维数组的初始化可以有如下三种方式:1.初始化方法1逐行给出数组元素值,示例如下:intsum[2][5]={{5,4,3,2,1},{-6,-4,6,3,0}};2.初始化方法2按顺序逐个给出数组元素,示例如下:intsum[2][5]={5,4,3,2,1,-6,-4,6,3,0};3.初始化方法3二维数组也可以进行局部初始化,示例如下:intnum[4][4]={{1,2,3,4},{-2,0,-1,3},{7,10,-9,6}};第9页,共25页,2024年2月25日,星期天10二维字符串数组它是二维数组的特殊形式,其元素值为字符。二维字符串数组的定义形式如下:char数组名[常量表达式1][常量表达式2];其中,左下标决定字符串的个数,右下标说明字符串的最大长度。二维字符串数组的声明示例如下:charstr[3][80];该语句声明了一个二维字符串数组,可存放3个字符串,单个字符串的最大长度为80个字符。第10页,共25页,2024年2月25日,星期天11例:数组赋值,观察存储空间#include"reg52.h"voidmain(){unsignedchara[6]={0,1,2,3,4,5},b[6];intd[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},k[3][4];charch[]={"abcdABCD"};unsignedchari,j;for(i=0;i<6;i++){b[i]=a[i]; //一维数组赋值

}for(i=0;i<3;i++){for(j=0;j<4;j++){k[i][j]=d[i][j]; //二维数组赋值

}}while(1);//暂停

}第11页,共25页,2024年2月25日,星期天12二、指针在C51程序中,访问或修改变量可以通过两种方式来实现。一种是直接访问或修改这块区域的内容来实现的;另一种是先求出变量的地址,然后再通过地址对该变量的值进行访问,这就是本节所要讲解的指针及指针变量。第12页,共25页,2024年2月25日,星期天131.地址、指针和指针变量的概念地址:是单片机内存单元的编号。通常一个字节称为一个内存单元。指针:实际上也是一个地址,其表示的是一个变量在内存中的首地址。不同的数据类型所占用的内存单元数和它的大小有关。在C51语言中,根据数据类型或数据结构的不同,一个变量往往都占有一组连续的内存单元,单用“地址”这个概念并不能很好地描述这个变量,从而引进了“指针变量”的概念。指针变量是指向一个数据结构的首地址,因而概念更明确,寻址更方便。第13页,共25页,2024年2月25日,星期天142.指针变量的声明指针变量的声明与一般变量的声明相似,声明指针变量的一般形式为:类型标识符*指针名1,*指针名2,…;其中前面的“类型标识符”表示该指针变量所指向的变量的类型,即指针变量的类型。典型的指针变量的声明示例如下:int*p1; //p1是指向整型变量的指针变量char*p2; //p2是指向字符变量的指针变量float*p3; //p3是指向浮点变量的指针变量第14页,共25页,2024年2月25日,星期天153.指针变量的赋值指针变量被声明后可以指向任何同类型的变量。如果定义指针变量时不进行初始化,编译系统不能确定它具体的指向,此时该指针变量被初始化为NULL,它的值为0。这里需要强调的是,未经赋值的指针变量不能在程序中使用,否则将由指针指向错误导致整个程序的混乱。另外,指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。在C51语言中,不知道变量的具体地址,变量的首地址是由编译系统分配的。为此,C51语言中提供了地址运算符“&”,可以获取变量的首地址。其一般形式如下:&变量名第15页,共25页,2024年2月25日,星期天16假设有指向整型变量的指针变量p和整型变量a,如要把整型变量a的地址赋予p,(1)可以采用初始化赋值,示例如下:inta;int*p=&a;//初始化赋值,&a表示取变量a的首地址(2)也可以采用取地址赋值,示例如下:inta;int*p;p=&a; //利用&a获得变量a的首地址,然后赋值给p第16页,共25页,2024年2月25日,星期天17把一个指针变量的值直接赋予相同类型变量的另一个指针变量。示例如下:inta=5,b=6; //定义变量和初始化int*p1=&a,*p2=&b; //定义指针变量和初始化p2=p1; //把a的地址赋予指针变量p2*p2=*p1; //把p1指向的内容赋给p2所指的区域例:观察指针变量的类型改变和引用第17页,共25页,2024年2月25日,星期天18三、

函数C51语言中也引入了函数的概念。C51程序中的函数数目是不受限制的,但是,一个典型的单片机程序都必须包含且只能包含一个主函数,即main函数,它是整个程序的入口,整个程序从这个主函数开始执行。C51语言允许用户使用一些编译环境自带的库函数,合理使用库函数可以大大简化程序设计过程。同时,为了有利于程序的模块化,促进程序资源的共享。C51也支持用户使用自定义函数。

18第18页,共25页,2024年2月25日,星期天19函数是能够实现特定功能的代码段。一个C51程序通常由一个主函数和若干个函数构成。其中,主函数即main()函数。C51程序的执行总是从main函数开始,完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。一个C51源程序必须有,且只能有一个主函数main()。除了主函数外,C51还提供了极为丰富的库函数,而且还允许用户自定义函数。在C51程序中,由主函数调用其他函数,其他函数之间也可以相互调用。同一个函数可以被一个或多个函数调用任意次。在使用C51函数时,需要注意如下几点:C51的源程序的函数数目是不限的。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。函数之间允许相互调用,也允许“嵌套调用”。函数还可以自己调用自己,称为“递归调用”。main()函数是主函数,它可以调用其他函数,而不允许被其他函数调用。第19页,共25页,2024年2月25日,星期天20库函数与自定义函数库函数是针对一些经常使用的算法,经前人开发、归纳、整理形成的通用功能子函数。KeilC51内部有数百个库函数,可供用户调用,调用KeilC51的库函数时只需要包含具有该函数说明的相应的头文件即可,如#include<REG51.H>。当使用不同类型的单片机时,可包含其相应的头文件。第20页,共25页,2024年2月25日,星期天21在C51语言中,函数定义的一般一般形式如下:类型说明符函数名(形式参数列表)形参类型说明{语句return语句}其中:(1)“类型说明符”声明了函数返回值的类型,该返回值可以是任何有效类型。如果函数没有返回值,则可以采用void说明符。函数类型的说明必须处于对它的首次调用之前,这样C51程序编译时才能为返回非整型值的函数生成正确代码。(2)“形式参数列表”是一个用逗号分隔的参数变量表。当函数被调用时,这些变量接收调用参数的值。(3)“return语句”用于返回函数执行的结果,如果没有返回值,则可以省略该语句。

第21页,共25页,2024年2月25日,星期天22函数的调用函数名(实参列表)其中,函数名即被调用的函数,实参列表是主调函数传递给被调函数的数据。通常,函数可以有以下3种调用方式。(1)函数语句:把函数作为一个语句,主要用于无返回值的函数。示例如下:delay();(2)函数表达式:函数出现在表达式中,主要用于有返回值的函数,将返回值赋值给变量。示例如下:c=min(x,y); //

温馨提示

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

评论

0/150

提交评论