第5章-数组与指针课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第5章-数组与指针课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 指针 课件
- 资源描述:
-
1、第5章 数组与指针 本章学习要点 1.掌握一维数组的定义、赋初值以及简单应用;2.掌握一维字符数组和字符串之间的关系,了解字符串的常用操作;3.掌握二维数组的定义、赋初值,了解其应用;4.掌握指针的定义和运算;5.掌握指针与一维数组、字符串的关系;6.掌握动态内存管理的方法;7.掌握别名引用和指针引用。第5章 数组与指针 5.1 一维数组 5.2 二维数组 5.3 指针 5.4 动态内存管理 5.5 引用5.1 一维数组 5.1.1 一维数组的定义和初始化1.定义 什么是数组?数组是按相邻内存单元存放的单种数据类型的一组元素。换句话说:数组是一组元素的集合,这些元素具有相同的数据类型,并且这些
2、元素在计算机内存中是被存放在相邻的内存单元中的,这些元素不需要使用不同的变量名来定义,它们共享同一个名称,并且通过它们在数组中的位置加以区分。我们把这个共享的名称叫做数组名,而把每个元素在数组中的位置用下标进行表示,下标一般从 0开始。在使用数组前必须进行声明,定义一维数组的格式如下:;例如:要定义一个整型数组用来存放全班30个学生的成绩。int cj30;此数组包含30 个元素,这30个元素分别为:cj0、cj1、cj29,数据类型都为整型。2.初始化 当我们声明了一个数组之后,相当于在内存中开辟了一串连续的内存单元,接下来就要往这些内存单元中存储数据,我们把这一过程称之为赋值。如果是第一次
3、进行赋值,则称之为初始化。给数组赋值有下面几种 方法:(1)可以给每个数组元素单独赋值:cj0=50;/可以直接赋以一具体的数据cj1=cj0;/可以把其它数组元素的值赋值给该数组元素cj2=x;/可以把其它变量的值赋值给该数组元素cj3=cj0+cj2;/可以把表达式的值赋值给该数组元素(2)可以对整个数组赋值如:float money 3=12.5,34.6,5.8;或者float money 3;money 3=12.5,34.6,5.8;注意:这种赋值方法在使用时必须确保中给出的数据个数必须要小于或者等于数组的实际大小,否则将会出现错误。在初始化时需要注意:(1)对数组赋值时,不能用一
4、个数组对另外一个数组赋值。如:int merry3=mike3;(2)在声明数组的时候需要说明数组的大小,除非你在同一个语句中对它进行初始化。如:int merry=1,2,3;/说明该数组有三个元素这种情况是错误的:int merry;5.1.2 一维数组的应用【例5.1】通过计算机接收某班级30个同学的语文成绩,并且按照从高到低输出。#include class students float cj30;/定义一个cj数组,用于存储成绩 public:void sortData()/接收数据并且排序for(int m=0;m30;m+)/接收30 个成绩coutcjm;float temp;
5、/排序for(int i=0;i29;i+)for(int j=i+1;j30;j+)if(cjicjj)temp=cji;cji=cjj;cjj=temp;void display()for(int j=0;j 30;+j)cout cjj endl;int main()students C1;C1.sortData();C1.display();5.1.3一维字符数组与字符串1.一维字符数组 如果数组存放的数据属于文本,我们就将这样的数组称为字符数组。(1)声明 一维字符数组的声明与一维整型数组的声明类 似,只是将表示类型的关键字换成char,格式如下 char 数组名数组大小;例如:ch
6、ar array10;代表在内存中申请10个连续的存储单元,这些存储单元用来存放字符。(2)赋值如:定义一个字符数组,需要存储的数据为:abcdchar name4;name0=a;name1=b;name2=c;name3=d;也可以这样写:char name4=a,b,c,d;2.字符串 字符串是一个以NULL(“0”)结尾的字符数组,换句话讲,如果数组以NULL结尾,那么该数组就称为字符串,简称为串。在实际显示中,NULL是不可显示字符,所以不在屏幕上显示,它只表示串的结束。字符串的声明同字符数组,只是在赋值上有所区别。如:存储字符串mike char name5=”mike”;/字符串
7、mike实际长度为5 或 char name=”mike”;/计算机根据实际值计算出数组长度 或 char name5;/先定义数组,在逐个赋值 name0=m;name1=i;name2=k;name3=e;name4=0;注意:双引号表示所括出来的数据是字符串,如果是单个的字符,应该用单引号,因此在上例中逐个赋值时为了表示所存储的数据是字符串必须在最后存储一个0,代表字符串的结束。如果最后没有name4=0;该语句只能说明name数组是一个字符数组,它的长度为5,已经存储了4个字符,最后一个元素还没有赋值。例如:要记录学生的姓名,该如何定义数组?分析:由于学生的姓名是属于字符串,所以要定义
8、一个字符串数组,如果每个学生的姓名长度在20个字符以内,则可以定义该数组的长度为21。char name21;5.1.4字符串的主要操作1.字符串的输入和输出 字符串的输入和输出与一般变量的输入与输出类似,用cin和cout实现。【例5.2】某网站需要记录来访成员的信息并显示它们,需要记录的是姓名、城市、电话号码。#includeclass customer char name30;char city30;char phonenumber15;public:void acceptdata()coutname;coutcity;coutphonenumber;/只需要直接给出串名 void di
9、splaydata()cout”your name is:”nameendl;cout”your city is:”cityendl;cout”your telephonenumber is:”phonenumberendl;int main()customer s;cout”please enter these information:”endl;s.accpetdata();s.displaydata();return 0;2.字符串的常用函数(1)strlen()求字符串的长度该函数将返回字符串中实际存储的字符个数,0除外,假设一字符串为“miker”,串名为name,则语句 couts
10、trlen(name)endl;将得到结果5。(2)strcpy()复制字符串要将一个字符串复制给另外一个字符串,不能采用以下这种方法:char amounts6=”hello”;char customer6;customer=amounts;/非法操作 我们可以采用逐个赋值的方法:char amounts6=”hello”;char customer6;customer0=h;customer1=e;customer2=l;customer3=l;customer4=e;customer5=0;也可以用函数strcpy()实现:char amounts6=”hello”;char custo
11、mer6;strcpy(customer,amounts);/*可以将amounts中的数据复制给 customer*/(3)strcat()字符串的连接该函数是将一个字符串连接到另一个字符串的后面,得到一个新的字符串。如要将字符串customer连接到字符串amounts的后面,可以采用下列语句:char amounts12=”hello”;char customer6=”world”;strcat(amounts,customer);/*amounts字符串为“helloworld”,customer的值不变*/注意:要保证前一个字符串的空间足够大,否则将得不到正确结果。(4)strcmp
12、()比较字符串在实际操作中,我们经常需要比较两个字符串,比如要将几个学生的姓名按照升序排列,这时不能用关系运算符来比较。我们用函数strcmp()【例5.3】会员购物享受8折优惠,否则全价购买#include#includeclass cust char shenfen8;float money;public:void just()cout shenfen;coutmoney;if(strcmp(shenfen,huiyuan)=0)coutyour money is:money*0.8;else coutyour money is:money;int main()cust lihua;lih
13、ua.just();return 0;5.2 二维数组 5.2.1 二维数组的定义和初始化1.定义 一维数组在空间上,我们可以将它看作是一行或者一列,是一维的、线性的;而二维数组是包含多行多列的一个矩阵,是二维的。2.声明 声明一个二维数组必须指出该数组包含的行数和列数。格式如下:数组名行数列数;假如定义一个包含2行3列的二维整型数组:int number23;该数组第一维大小是2,第二维大小是3,表示该数组声明的内存空间是一个2行3列的矩阵,这个数组包含的总元素个数是23=6,如图5-1表示:图5-1 2行3列的二维数组由于数组的下标是从0开始,所以该矩阵第一行为第0行,第一列为0列,num
14、ber00表示的是第0行第0列的这个元素。number00 number01 number02 number10 number11 number12 3.赋值 我们可以在声明二维数组的同时给予初始化,当然也可以在以后进行初始化,但有一点需要注意,那就是二维数组同一维数组一样,在声明的同时需要说明大小,除非你在同一个语句中对它进行初始化,这时也须指定列数。由于二维数组涉及多行多列,因此在对其进行赋值时和一维数组有所不同。【例5.4】定义一个3行2列的整型数组,并进行赋值 int num32=15,32,10,21,90,7;在这个例子中,中的数据位于同一行中,由于该数组有3行,所以每行数据都被括
15、起来,而所有的行都被包括在最外层的中。也可以写成:int num 2=15,32,10,21,90,7;这时省略了行数,但列数不能省略。下面这种写法就是错的:int num =15,32,10,21,90,7;/错误 5.2.2 二维数组的应用【例5.5】通过计算机接收某班级10个同学的姓名,并按照升序排列#include#includeclass studentchar name1020;/定义一个二维数组,每行可存储20个字符,共10行void accept()int i;for(i=0;i10;i+)cout”please enter the students name:”namei;/
16、只需给出需要存储的行数 void px()/排序char stmp20;for(int i=0;i10;i+)for(int j=i;j0)strcpy(stmp,namei);strcpy(namei,namej);strcpy(namej,stmp);void display()for(int i=0;i10;i+)coutnameiendl;int main()student s;s.accept();s.px();s.display();return 0;5.3 指针 5.3.1指针的定义与初始化 1.定义 什么是指针?举例来讲,如果将计算机的各个内存单元比作是一个一个的小抽屉的话,那
展开阅读全文