数组与指针课件.ppt
《数组与指针课件.ppt》由会员分享,可在线阅读,更多相关《数组与指针课件.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于数组与指针第1页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室2 本章将深入学习数组包括多维数组的知识和应本章将深入学习数组包括多维数组的知识和应用,以及它们与指针的关系。用,以及它们与指针的关系。C+C+语言拥有在运行时获得变量地址和操纵地址的能语言拥有在运行时获得变量地址和操纵地址的能力,这种可用来力,这种可用来操纵地址操纵地址的变量类型就是指针。指针的变量类型就是指针。指针可以用于数组,用于内存访问,还可作为函数的参可以用于数组,用于内存访问,还可作为函数的参数。数。本章重点本章重点第2页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室3
2、5.1.1 数组、数组元素及其存储方式 5.1.2 数组名作为函数参数 数组数组第3页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室4数组的概念数组的概念a1,a2,a3,anai脚标(下标)脚标(下标)下标变量名下标变量名下标变量下标变量下标变量名相同、下标个数也相同、类型也相同的一组下标变量的下标变量名相同、下标个数也相同、类型也相同的一组下标变量的集合称为数组。含有一个下标的数组为一维数组,含有两个下标的数组集合称为数组。含有一个下标的数组为一维数组,含有两个下标的数组为二维数组,为二维数组,数组的引入:数组的引入:数组数组(array)(array)是一种是一种
3、顺序容器顺序容器(sequence container)(sequence container),是由单一类,是由单一类型元素组成的一个有序集合:型元素组成的一个有序集合:int int fibon10=0,1,1,2,3,5,8,13,21,34;fibon10=0,1,1,2,3,5,8,13,21,34;第4页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室5数组的定义数组的定义【存储类别存储类别】元素类型元素类型数组名数组名长度长度【长度长度】;长度长度必须是正整型常数或整型常量表达式必须是正整型常数或整型常量表达式只有一个只有一个长度长度的数组为一维数组,有两个
4、的数组为一维数组,有两个长度长度的数的数组为二维数组,组为二维数组,有,有n个个长度长度的数组为的数组为n维数组。维数组。【】表示表示【】中的内容可省略中的内容可省略【】表示表示【】中的内容可重复中的内容可重复0n次次存储类别可以是存储类别可以是auto、static、extern,缺省时为,缺省时为auto数值型数组数值型数组第5页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室6例如:例如:inta10;floatb34;intc10,d1020,e345;则:则:a数组的下标在数组的下标在09之间之间B数组的第一维(行)下标在数组的第一维(行)下标在02之间,第二维
5、(列)下标在之间,第二维(列)下标在03之之间间其他以次类推。其他以次类推。第6页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室7数组元素的引用数组元素的引用数组名数组名下标下标【下标下标】下标下标必须介于必须介于0长度长度-1之间,可以是整型表达式之间,可以是整型表达式一个数组元素等价于一个简单变量一个数组元素等价于一个简单变量如:如:a3b22第7页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室8数组元素的初始化数组元素的初始化【存储类别存储类别】元素类型元素类型数组名数组名【长度长度】【长度长度】=初始数据表初始数据表;在定义数组的同时赋以
6、初始值称为初始化在定义数组的同时赋以初始值称为初始化此时第一维的长度可以省略,但此时第一维的长度可以省略,但不能省!不能省!初始数据表可以是:数据初始数据表可以是:数据【,数据,数据】还可以适当加还可以适当加如:如:inta5=1,2,3,4,5;inta5=1,2,3;intb34=1,2,3,4,5,6,7,8,9,10,11,12;intb4=1,2,3,4,5,6,7,8,9,10,11,12;intb34=1,2,3,4,5,6,7,8,9,10,11,12;intb34=1,2,3,5,6,9,10,11,12;第8页,此课件共94页哦2022/10/14计算机基础教研室计算机基础
7、教研室9 0 1 2 3 21 34fibon0 fibon1 fibon2 fibon3 fibon8 fibon9 图图5 5.1 数组在内存中的存储数组在内存中的存储数组元素的访问方式:数组元素的访问方式:通过通过下标操作符(下标操作符(subscript),按元素在数,按元素在数组中的位置进行访问,称为组中的位置进行访问,称为索引访问索引访问(indexing)或或下标访问(下标访问(subscripting)。参见图参见图5.1。数组与数组元素及其存储方式数组与数组元素及其存储方式第9页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室10注意:注意:1:数组是一
8、种数组是一种组合类型组合类型,是不能作为一个整体进行访问和处理的,是不能作为一个整体进行访问和处理的,只能按元素进行只能按元素进行个别个别的访问和处理。的访问和处理。2:C+数组第一个元素的下标为数组第一个元素的下标为0,而不是,而不是1,且下标表达方式是,且下标表达方式是固定的。固定的。3:数组元素在内存中是从低地址开始:数组元素在内存中是从低地址开始顺序排列顺序排列,各元素的存储单,各元素的存储单元占用内存大小相同,各元素的存储单元之间元占用内存大小相同,各元素的存储单元之间没有空隙没有空隙,可以从数,可以从数组第一个元素存储单元的起始地址计算出任意一个元素存储单元组第一个元素存储单元的起
9、始地址计算出任意一个元素存储单元的起始地址。的起始地址。数组与数组元素及其存储方式第10页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室11【例例 5.15.1】找最大数和最小数找最大数和最小数constintSIZE=15;intmain()intarrSIZE,i,high,low;for(i=0;iSIZE;i+)arri=rand()%100;coutHerearetheSIZErandomnumbers:endl;for(i=0;iSIZE;i+)coutarrit;coutendl;high=arr0;/初始化时最大和最小值均为数组首元素初始化时最大和最小值
10、均为数组首元素low=arr0;for(i=1;ihigh)high=arri;if(arrilow)low=arri;couthighestvalueishighendl;coutlowestvalueislowendl;return0;第11页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室12结构数组定义:结构数组定义:structkeywordcharword16;/关键字关键字intcount;/该关键字将在源程序中出现的次数该关键字将在源程序中出现的次数;初始化:初始化:结构数组初始化时可以用括号来区分每一个结构,例如:结构数组初始化时可以用括号来区分每一个结
11、构,例如:keywordkeytab=auto,0,break,0,case,0,;当提供了数组中所有结构值时,不必用这种括号的形式。当提供了数组中所有结构值时,不必用这种括号的形式。keywordkeytab=auto,0,break,0,case,0,char,0,unsigned,0,volatile,0,while,0,;数组与数组元素及其存储方式第12页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室13对象数组定义:对象数组定义:uCGoodsgoods3;u该商品类对象数组包含该商品类对象数组包含3个商品对象数组元素,系统调用个商品对象数组元素,系统调用3次
12、默认的构造函数次默认的构造函数来建立这来建立这3个商品对象数组元素。个商品对象数组元素。初始化:初始化:应该完整书写各个元素的构造函数及成员数据初值:应该完整书写各个元素的构造函数及成员数据初值:CGoodsgoods3=CGoods(夏利夏利2000,30,98000.0),/调用三参数构造函数,初始化调用三参数构造函数,初始化goods0CGoods(桑塔纳桑塔纳2000,164000.0),/调用两参数构造函数,初始化调用两参数构造函数,初始化goods1CGoods()/调用默认的构造函数,初始化调用默认的构造函数,初始化goods2;数组与数组元素及其存储方式第13页,此课件共94页
13、哦2022/10/14计算机基础教研室计算机基础教研室14数组作为参数:数组作为参数:数组数组可以作为函数的参数。在函数调用时可以作为函数的参数。在函数调用时传递实参数传递实参数组的首地址组的首地址,所以在被调函数中对形参数组的处理,所以在被调函数中对形参数组的处理实际就是对调用函数的实参数组的处理。实际就是对调用函数的实参数组的处理。C+C+只传递数组首地址,而对数组边界不加检查。只传递数组首地址,而对数组边界不加检查。这带来的好处是,函数对长度不等的同类数组都通用。这带来的好处是,函数对长度不等的同类数组都通用。如要指定长度可以设定另一个参数来传递数组元素的个如要指定长度可以设定另一个参数
14、来传递数组元素的个数。数。数组名作为函数参数数组名作为函数参数第14页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室15数组名作为函数参数数组名作为函数参数u数组元素作实参,与单个变量一样。数组元素作实参,与单个变量一样。u数组名作参数,形、实参数都应是数组名,数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。类型要一样,传送的是数组首地址。u对形参数组的改变会直接影响到实参数组。对形参数组的改变会直接影响到实参数组。第15页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室16【例例5.25.2】字符数组与字符数组相连接字符数组
15、与字符数组相连接voidstrcat(chars,charct)inti=0,j=0;while(si!=0)i+;while(ctj!=0)si+=ctj+;si=0;voidmain()chara40=李明李明;charb20=“是华中科技大学学生是华中科技大学学生;strcat(a,b);coutaendl;/打印字符数组打印字符数组a a第16页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室17多维数组多维数组 C+C+中数组可以中数组可以嵌套嵌套,就是多维数组。,就是多维数组。定义二维数组的通用格式为:定义二维数组的通用格式为:类型说明符类型说明符 数组名数组
16、名 常量行表达式常量行表达式 常量列表达式常量列表达式;行与列用常量表达式表示。行与列用常量表达式表示。第17页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室18二维数组:二维数组:一维数组可对应数学中的向量,而二维数组可对应矩阵,可用一个二一维数组可对应数学中的向量,而二维数组可对应矩阵,可用一个二维数组存储矩阵。维数组存储矩阵。多维数组存储与访问方式多维数组存储与访问方式119753117131175312108642二维数组的横向称为行,纵向称为列,上面这个数组为三行六列。二维数组的横向称为行,纵向称为列,上面这个数组为三行六列。第18页,此课件共94页哦2022
17、/10/14计算机基础教研室计算机基础教研室19多维数组存储与访问方式多维数组存储与访问方式二维数组分析:二维数组分析:上面的数组可定义为:上面的数组可定义为:intmat36;mat00 mat01 mat02 mat03 mat04 mat05 mat10 mat11 mat12 mat13 mat14 mat15 mat20mat21mat22mat23mat24mat25有有了了确确定定的的关关系系后后可可以以算算出出多多维维数数组组任任一一元元素素在在内内存存的的位位置置,设设有有a a数数组组m m行行n n列,每个元素占列,每个元素占b b个字节,个字节,aij aij 的首地址
18、为的首地址为:数组的首地址数组的首地址+(i*n+j)*b;+(i*n+j)*b;第19页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室20多维数组存储与访问方式多维数组存储与访问方式 图图5.36*3*4的三维数组的三维数组多维数组分析:多维数组分析:C/C+中的多维数组基本的定义是以数组作为元素构成的数组,二中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,依此类推。也就是说,依此类推。也就是说,多维数组用的是一个嵌套的定义多维数组用的是一个
19、嵌套的定义。图图5.3表示一个三维数组可定义为:表示一个三维数组可定义为:inta3d634;第20页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室21多维数组存储与访问方式多维数组存储与访问方式多维数组的数组名:多维数组的数组名:代表数组中代表数组中第一维(最高维)第一个元素第一维(最高维)第一个元素(0号元素)在内存号元素)在内存中的中的首地址首地址,如,如三维数组三维数组的的数组名数组名代表的是组成三维数组的代表的是组成三维数组的第一个第一个二维数组二维数组的的存储首地址存储首地址。当数组作为函数的参数进行传递时,多维数组同样是作为当数组作为函数的参数进行传递时,
20、多维数组同样是作为第一维第一个数组的首地址传递给函数,所以物理上是传地址。第一维第一个数组的首地址传递给函数,所以物理上是传地址。在函数中对形参的数组元素的修改实际上是对作为实参的原数组的元素在函数中对形参的数组元素的修改实际上是对作为实参的原数组的元素进行修改。进行修改。第21页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室22多维数组存储与访问方式多维数组存储与访问方式初始化:初始化:将所有数据写在一个将所有数据写在一个内,按顺序赋值内,按顺序赋值例如:例如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;static int a
21、34=1,2,3,4,5,6,7,8,9,10,11,12;分行给二维数组赋初值分行给二维数组赋初值例如:例如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;static int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以对部分元素赋初值可以对部分元素赋初值例如:例如:static int a34=1,0,6,0,0,11;static int a34=1,0,6,0,0,11;第22页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室23多维数组存储与访问方式多维数组存储与访问方式141619258910157
22、1212182024741361091013141567511109878129412231516691153152619221445321821171693211191713117530076543210图图5.4 极点与鞍点示意图极点与鞍点示意图【例例5.4】已知矩阵已知矩阵intmat88,找出其中的极点,找出其中的极点与鞍点。如某元素在所在行相邻与鞍点。如某元素在所在行相邻点中与所在列相邻点中均为最大点中与所在列相邻点中均为最大或最小,则为极点;如某元素在或最小,则为极点;如某元素在所在行(或列)相邻点中为最大,所在行(或列)相邻点中为最大,同时该元素在所在列(或行)相同时该元素在所在
23、列(或行)相邻点中为最小,则为鞍点。邻点中为最小,则为鞍点。第23页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室24【例例5.45.4】矩阵极点与鞍点矩阵极点与鞍点#include#includeusing namespace std;int mat88=0,3,5,7,11,,25,19,16,14;int maxmin(int a,int b,int c)/判断相邻判断相邻3元素中间元素是否最大或最小元素中间元素是否最大或最小 if(ab&bc)return-1;else if(ac)return 1;else return 0;/b为最大返回为最大返回1,最小返
24、,最小返-1,其他为,其他为0第24页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室25int main()int i,j,k,l;for(i=1;i=6;i+)for(j=1;j=6;j+)k=maxmin(matij-1,matij,matij+1);if(k=0)continue;l=maxmin(mati-1j,matij,mati+1j);if(l=0)continue;if(k=1&l=1)cout极大点:极大点:;else if(k=-1&l=-1)cout极小点:极小点:;else cout“鞍鞍 点:点:”;coutsetw(2)matij;i=i;j
25、=jendl;return 0;【例例5.45.4】矩阵极点与鞍点矩阵极点与鞍点第25页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室26举例:使用数组名作为函数参数举例:使用数组名作为函数参数u主函数中初始化一个矩阵并将每个元素都输出,主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。函数之后输出各行元素的和。第26页,此课件共94页哦2022/10/14计算机基础教研室计算机基础教研室2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 指针 课件
限制150内