欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C++程序设计第7章指针.ppt

    • 资源ID:6153989       资源大小:306.50KB        全文页数:98页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++程序设计第7章指针.ppt

    第7章 指针,目的与要求7.1 指针与指针变量7.2 指针与数组7.3 指针变量与数组作为函数参数(习题课)7.4 指针数组和指向一维数组的指针变量7.5 返回指针值的函数与函数指针变量7.6 new和delete运算符7.7 引用类型变量和const类型的指针本章小结,目的与要求,通过本章的学习,要求了解指针、指针变量、指针数组、指向一维数组的指针、返回指针值的函数、函数指针、引用类型变量的概念,掌握指针变量的定义格式及使用方法,重点掌握用指针变量处理有关变量、一维数组与字符串数组的问题。掌握用指针变量与数组作为函数参数时函数的使用方法。了解二维数组中有关行首地址、行地址与元素地址的概念,了解二维数组中元素的各种表示方式。初步学会指针数组、指向一维数组的指针、返回指针值的函数与函数指针的定义格式与简单使用方法。学会用new与delete运算符动态分配与回收内存空间的方法。掌握引用类型变量的定义与使用方法。,7.1 指针与指针变量,7.1.1 指针的概念(1)指针:系统为变量、数组、函数等分配内存的首地址称为指针。(2)指针变量:用于存放指针(内存首地址)的变量称为指针变量。,指针变量的定义与引用,1.指针变量的定义存储类型*,*,*;2.指针变量的赋值(1)取地址运算符&:取出变量的内存首地址(2)指针变量的赋值:指针变量=&变量;或指针变量=指针变量;,3.指针变量的引用,指针运算符*:通过指针变量间接访问变量对应存储单元内容。【例7.1】定义指针变量p、p1、q,并将变量a的地址赋给p、p1,输出a、p、p1、*p、*p1的值。例程 4.指针变量初始化 例如:int*p=,指针变量的运算,1.指针变量赋值运算【例7.2】定义三个整型变量a1、a2、a3,用指针变量完成a3=a1+a2的操作。再定义两个实型变量b1、b2,用指针变量完成b1+b2的操作。例程 2.指针变量的算术运算(1)自加运算 格式:+;作用:将指针变量指向下一个元素,即:=+sizeof(),指针变量的算术运算,(2)自减运算 格式:;作用:指针变量指向上一元素,即:=sizeof()自加运算和自减运算既可后置,也可前置。(3)指针变量加n运算 格式:=+n;作用:将指针变量指向下n个元素的运算,即:=+sizeof()*n,指针变量的算术运算,(4)指针变量减n运算 格式:=n;作用:将指针变量指向上n个元素的运算,即:=sizeof()*n【例7.3】指针变量的自加、自减、加n和减n运算。例程,3.指针变量的关系运算,指针变量的关系运算是指针变量值的大小比较,即对两个指针变量内的地址进行比较,主要用于对数组元素的判断。【例7.4】用指针变量求一维实型数组元素和,并输出数组每个元素的值及数组和。例程,4.指针运算符的混合运算与优先级,(1)指针运算符*与取地址运算符&的优先级相同,按自右向左的方向结合。(2)“+”、“”、“*”、“&”的优先级相同,按自右向左方向结合。【例7.5】指针运算符“*”、“&”、“+”优先级与结合性示例。例程,7.2 指针与数组,一维数组与指针 1.数组指针 数组的首地址称为 数组指针。数组a的首地址用数组名a表示,即:数组指针=&a0=a。,2.数组指针变量,存放数组元素地址的变量称为数组指针变量。例如:int a5;int*p=则p为数组指针变量。【例7.6】用指针变量访问数组元素。例程 由此例可以看出,访问数组元素值有三种方法:(1)移动指针变量(p+),依次访问数组元素(*p)。(2)指针变量不变,用p+i或 a+i 访问数组第i个元素。(3)以指针变量名p作为数组名用pi访问数组元素ai。,3.数组元素的引用,对一维数组a 而言,当p=a时:第i个元素地址:&ai=p+i=a+i。第i个元素值:ai=*(p+i)=*(a+i)=pi。一维数组的第i个元素有四种方式引用:ai、*(p+i)、*(a+i)、pi。用数组指针的四种方法求一维数组中的最大值的方法为:方法一:使用*(a+i)访问ai方法一:用指针变量名p代替数组名a,即用 pi代替ai方法二:移动指针变量p+,用*p访问ai方法三:使用*(p+i)访问第 i个元素ai,7.2.2 二维数组与指针,1二维数组元素在内存中的存放方式(1)二维数组元素在内存按行顺序存放(2)可用指针变量来访问二维数组元素。例如:int a33;【例7.7】用指针变量输出二维数组各元素的值。例程,2.二维数组行首地址,在二维数组a中:(1)第i行首地址(即第i行第0列元素地址):用ai表示,ai=&ai0(2)元素aij的地址:用ai+j来表示,而元素aij的值为:*(ai+j)。【例7.8】定义一个3行3列数组,输出每行的首地址及所有元素值。例程,3.二维数组行地址,(1)第i行的行地址:用a+i或&ai表示。(2)行地址与行首地址区别 行地址的值与行首地址的值是相同的,即:a+i=&ai=ai=&ai0 两者类型不同,行地址a+i与&ai只能用于指向一维数组的指针变量,而不能用于普通指针变量。数组名a表示第0行的行地址,即:a=a+0=&a0。,4.二维数组的元素地址与元素值,(1)第i行首地址:ai、*(a+i)、&ai0。(2)元素aij的地址:ai+j、*(a+i)+j、&ai0+j、&aij(3)元素aij值:*(ai+j)、*(*(a+i)+j)、*(&ai0+j)、aij【例7.9】定义二维数组a33,用二种方式输出行地址,用三种方式输出行首地址,用四种方式输出所有元素地址及元素值。,例程,二维数组a的行地址、行首地址、元素地址、元素值的各种表示方式,7.2.3 字符串与指针,1.字符串与字符串指针(1)字符串指针:是字符串的首地址;(2)字符串指针变量:存放字符串元素地址的变量;(3)字符串指针变量定义格式:char*=“字符串”;(4)字符串指针变量的引用【例7.10】用字符串指针变量实现字符串拷贝。例程,2.字符型指针变量与字符数组的区别,(1)分配内存(2)初始化赋值含义(3)赋值方式(4)输入/输出方式(5)值的改变,字符数组与字符型指针变量的区别小结,7.3 指针变量与数组作为函数参数(习题课),7.3.1 指针变量作为函数参数 1.函数定义格式(*,)函数体 2.函数调用格式 函数名(&变量,)或 函数名(指针变量,)3实参与形参的传送方式 传地址,指针变量作为函数参数时实参与形参的传送方式,用指针变量作为函数参数时,传送给函数的是变量地址或指针地址,所以为传地址方式。由于传送的是变量地址,所以可直接对函数内指针变量所指数据进行修改,并返回修改后的值。即:传地址可对实参单元进行修改,并返回修改值。当函数需要返回多个参数值时,可使用指针变量作为参数来实现。而传值方式的函数调用,只能返回一个函数值,其形参值是无法返回的。,指针变量作为函数参数举例,【例7.11】编写两个数据交换函数,用指针变量作为函数参数实现两个数据的交换,交换 过程如图所示。例程,指针变量作为函数参数举例,【例7.12】用指针变量作为函数参数,编写字符串复制函数str_cpy(char*p1,char*p2)。在主函数中定义二个字符数组str180、str280,用getline()函数将字符串输入str2中,然后调用str_cpy()函数将str2复制到str1中,最后输出str1。,例程,7.3.2 数组与指针作为函数参数,由于数组名为数组的起始地址,当把数组名作为函数参数时,其作用与指针相同,均为传地址。数组与指针作为函数参数有四种情况:(1)函数的实参为数组名,形参为数组。(2)函数的实参为数组名,形参为指针变量。(3)函数的实参为指针变量,形参为数组。(4)函数的实参为指针变量,形参为指针变量。【例7.13】用指针与数组作为函数参数,用四种方法求整型数组的最大值。例程【例7.14】用指针与数组作为函数参数,用四种方法实现一维整型数组的排序。例程,指针变量、数组指针变量、字符型指针变量小结,指针变量、数组指针变量、字符型指针变量都属于同一类型的指针变量,它们的定义格式为:*=,7.4 指针数组和指向一维数组的指针变量,7.3.1 指针数组(1)指针数组:由若干个同类型指针变量所组成的数组称为指针数组,指针数组中每一个元素都是一个指针变量。(2)指针数组定义格式为:存储类型*;其中:*表示定义了一个指针数组,类型指明指针数组中每个元素所指向的数据类型。,指针数组,例如,指针数组的定义:int*pi4;表示定义了由4个整型指针元素pi0、pi1、pi2、pi3组成的整型指针数组。char*pc4;表示定义了由4个字符型指针元素pc0、pc1、pc2、pc3组成的字符型指针数组。(3)指针数组元素的引用【例7.15】用指针数组输出字符串数组中各元素的值。例程 注意:除了用初始化方法给字符串数组c赋值外,也可用cin语句输入字符串到ci中。,指针数组举例,【例7.16】将若干个字符串按升序排序后输出。例程,7.4.2 指向一维数组的指针变量,1.作用:用于表示二维数组某行各元素值。2.定义格式:(*);例如:int a33=1,2,3,4,5,6,7,8,9;int(*p)3;/数组长度3必须与二维数组a33的列数3相同 p=,指向一维数组的指针变量,3.引用 定义了指向一维数组的指针变量p后,只要将二维数组a第i行的行地址a+i或 则可用(*p)0、(*p)1、(*p)n-1来表示数组a第i行的元素ai0、ai1、ain-1。【例7.17】用指向一维数组的指针变量,输入/输出二维数组中各元素值,求二维数组元素和,并输出元素和。例程,指向一维数组的指针变量,说明:(1)p所指一维数组的长度应与数组a的列数相同;(2)只能将行地址a+i 或&ai赋给指向一维数组的指针变量p,而不能将行首地址ai或*(a+i)赋给p;行首地址ai或*(a+i)只能赋给指向数组元素的指针变量。(3)指向一维数组的指针变量p加1后,p指向数组的下一行【例7.18】用指向一维数组的指针变量为函数的形参,求二维实型数组元素和。,例程,7.5 返回指针值的函数与函数指针变量,7.5.1 返回指针值的函数 在前面介绍的自定义函数中,函数的返回类型可以是整型、实型、字符型等等,如求两个整数最大值函数int max(int x,int y)的返回类型为整型。事实上,C+还允许自定义函数的返回类型为指针类型,如int*max(int x,int y)。若函数返回值为指针类型,则称该函数为返回指针值的函数。,返回指针值的函数的定义与调用,1.函数定义格式 定义返回指针值的函数格式为:*()其中:“*”说明函数返回一个指针,即返回一个地址。2函数调用格式 返回指针值的函数一般调用格式为:指针变量=(实参);或:(实参),返回指针值的函数举例,【例7.19】用返回指针值的函数求两个整数的最大值。【例7.20】编写返回指针值的字符串连接函数str_cat(),该函数能将字符串2连接到字符串1的尾部,并返回字符串1的地址。在主函数中定义两个字符数组,输入两个字符串到字符数组,调用字符串连接函数str_cat(),并将字符串1的返回地址赋给指针变量p,最后用p输出连接后的字符串。例程【例7.21】设计简单的加密程序,将字符串存入字符数组s,然后将s中的每一个字符按下述加密函数进行加密处理。si16 当 48si57,si中的字符为数字09;si=si23 当 65si90,si中的字符为大写字母AZ;si5 当97si122,si中的字符为小写字母az;其中si为字符串中第i个字符的ASCII码。输入的字符串只能由字符或数字组成。,例程,例程,函数指针变量,要讨论函数指针变量首先应了解函数指针的概念,然后才能讨论函数指针变量的概念。1函数指针 所谓函数指针就是函数的入口地址。与用数组名表示数组首地址类似,在C+中,用函数名来表示函数的入口地址。2函数指针变量 函数指针变量是用于存放函数指针的变量,也即存放函数入口地址的变量。要使用函数指针变量,必须先定义后使用。,函数指针变量的定义和赋值,3.函数指针变量的定义格式(*)();例如:float(*pf)(flaot x);表示定义了一个名为pf的函数指针变量。4.函数指针变量的赋值 由于函数指针变量用于存放函数的入口地址,而函数入口地址是用函数名来表示的,因此,在使用函数指针变量前,必须将函数名(即函数入口地址)赋给函数指针变量。例如:float(*pf)(float);/定义名为pf函数指针变量 float f(float x)/定义名为f的实型函数 return 1+x;pf=f;/将函数f()的入口地址赋给函数指针变量pf注意:只能将与函数指针变量具有同类型、同参数的函数名赋给函数指针变量。,函数指针变量的作用和调用,5.函数指针变量的作用 一旦函数入口地址f赋给函数指针变量pf后,就可以使用函数指针变量pf来表示函数f。因此,函数指针变量的作用是用函数指针变量来代替多个函数,完成某项运算操作,如对不同函数的定积分值计算。6.函数指针变量的调用格式 对函数指针变量进行赋值后,可用该指针变量调用函数。调用函数的格式:(*)();或:();如:float y;y=(*pf)(1);或 y=pf(1);,函数指针变量举例,【例7.22】当变量x=1时,用函数指针变量计算下列三个函数的值。f1(x)=1+x;f2(x)=;f3(x)=;,例程,函数指针变量举例,【例7.23】设计一个程序,用梯形法求下列定积分的值。例程,函数指针变量举例,分析:由高等数学可知,的定积分值等于由曲线y=f(x)、直线x=a、x=b、y=0所围曲边梯形的面积s,如图所示。现将曲边梯形划分成n个小曲边梯形s0、s1、s2、sn-1。每个曲边梯形的高均为h=(ba)/n,用梯形近似曲边梯形后各曲边梯形的面积近似为:s0=(y0+y1)*h/2s1=(y1+y2)*h/2s2=(y2+y3)*h/2 sn-1=(yn-1+yn)*h/2s=s0+s1+s2+sn-1=(y0+(y1+y2+yn-1)*2+yn)*h/2=(f(x0)+f(xn)/2+(f(x1)+f(x2)+f(xn-1)*hx0=a,xn=b,xi=a+i*h用梯形法求定积分面积的公式为:其中:a、b分别为积分的下、上限,n为积分区间的分隔数,h=(ba)/n,h为积分步长;f(x)为被积函数。,7.6 new和delete运算符,7.6.1 new 运算符1.new运算符的作用 new运算符用于动态分配内存空间,并将分配内存的地址赋给指针变量。2.new运算符的定义格式(1)=new;作用:动态分配由类型确定大小的连续内存空间,并将内存首地址赋给指针变量。(2)=new(value);作用:除完成(1)的功能外,还将value作为所分配内存空间的初始值。(3)=new;作用:分配指定类型的数组空间,并将数组的首地址赋给指针变量。,7.6.2 delete 运算符,(1)delete;作用:将指针变量所指的内存空间归还系统。(2)delete;或:delete;作用:将指针变量所指一维数组内存空间归还给系统。【例7.24】用new运算符动态生成由n个元素组成的一维数组,输入n个值给一维数组,求出并输出一维数组元素和,最后用delete运算符动态回收一维数组所占用的内存空间。例程,7.6.3 使用new 和 delete 运算符应注意的事项,(1)用new 为数组分配内存时,不能进行初始化赋值。例如:int*p=new int10(0,1,2,3,4,5,6,7,8,9);/是错误的。(2)用new 分配内存后,若指针变量值为0,则表示分配失败。此时应终止程序执行。(3)用new 分配内存空间的指针值必须保存起来,以便用delete 归还内存。否则会出现不可预测的后果。例如:float*p=new float(24.5),x;p=由于改变了指针p的值,所以系统已无法归还动态分配的存储空间。执行delete p时会出错。,7.7 引用类型变量和const类型的指针,7.7.1 引用类型变量的定义及使用 引用类型变量:是已定义变量的别名,变量与其引用变量共用同一内存空间。1.引用类型变量的定义引用类型变量的定义格式:/输出结果为100,引用类型变量的说明,对引用类型变量须说明如下:(1)定义引用类型变量时必须初始化,初始化变量必须与引用类型变量类型相同。例如:float x;int,2.引用类型变量作为函数参数,引用变量作为函数参数是一种传地址的数据传送方式。当形参为引用变量时,由于形参为实参的别名,所以实参与形参占用同一内存单元,对形参的操作就是对实参的操作。因此,使用引用类型变量可返回参数运算结果。【例7.25】用引用变量作为形参,编写使两个数据交换的函数,在主函数中调用该函数实现两个变量中数据互换。例程,7.7.2 const 类型变量,1.定义const型常量 定义格式:const=;,2定义const 型指针,有三种方法来定义const 型指针:定义格式 指针变量值 所指数据值(1)const*;作用:定义指针变量所指数据为常量 可改变 不能改变(2)*const;作用:定义指针变量值为常量 不能改变 能改变(3)const*const;作用:定义指针变量值为常量 不能改变 不能改变,本章小结,指针:是变量、数组、字符串、函数等在内存的地址。指针变量:是存放指针的变量。指针变量按定义格式大致可分为五种:指针变量、指针数组、指向一维数组的指针变量、返回指针值的函数、函数指针变量。1.指针变量 指针变量用于存放变量或数组的内存地址,必须先定义后使用。(1)指针变量定义格式为:存储类型*;例如:int b,a10,*p;(2)指针变量赋变量地址或数组地址:例如:p=&b;或p=a;(3)指针变量的引用:例如:*p,指针变量,(4)一维数组与指针:对于一维数组a,当*p=a,则:元素地址:a+i、p+i 元素值:ai、*(p+i)、*(a+i)、pi(5)二维数组与指针:对于二维数组amn:行首地址:*(a+i)、ai、&ai0,用于指向数组元素的指针变量。行地址:a+i、&ai,用于指向一维数组的指针变量。元素aij地址:ai+j、*(a+i)+j、&ai0+j、&aij。元素值:*(ai+j)、*(*(a+i)+j)、*(&ai0+j)、aij。(6)字符串与指针:在C+中字符串是存放在字符型数组中的,因此,只要将字符数组地址赋给指针变量pc,则pc就是字符串指针变量。可用字符串指针变量处理字符串。,数组与指针作为函数参数,数组与指针作为函数参数有4种情况:(1)函数的实参为数组名,形参为数组。(2)函数的实参为数组名,形参为指针变量。(3)函数的实参为指针变量,形参为数组。(4)函数的实参为指针变量,形参为指针变量。,2.指针数组,由若干指针元素组成的数组称为指针数组,其定义格式如下:存储类型*;例如:char c3 4=ABC,DEF,GHI;char*pc3=c0,c1,c2;,3.指向一维数组的指针变量,指向一维数组的指针变量可用于处理二维数组的运算问题,其定义格式为:(*);例如:int(*p)3;定义了一个指向一维数组的指针变量p,一维数组是由元素(*p)0、(*p)1、(*p)2组成。,4.返回指针值的函数,函数可返回一个指针值,该指针指向一个已定义好的任一类型的数据。定义返回指针值的函数格式为:*()例如:float*f(float x)定义了一个返回实型指针的函数f(),该函数的形参为实型的x。,5.函数指针变量,函数指针变量是用于存放函数指针的变量,也即存放函数入口地址的变量。函数指针变量的定义格式为:(*)();在实际使用时,必须将真实的函数入口地址赋给函数指针变量。此时对函数指针变量的调用就变成了对真实函数的调用。,6.new 和 delete 运算符,用new 运算符可以动态地分配内存空间,并将分配内存的地址赋给指针变量,语句格式有:=new;=new(value);=new;delete 运算符用来将动态分配的内存空间归还给系统,语句格式有:delete;delete;delete;,7.引用类型变量和const类型的指针,(1)引用类型变量 引用类型变量主要用于函数之间传送数据,其定义格式为:引用类型变量refa是已定义变量a的别名,引用类型变量refa与其相关的变量a使用相同的内存空间。由于引用类型变量与相关变量使用相同的内存空间,所以用引用类型变量作为函数形参时,形参与实参变量使用相同的内存,在函数内对形参的运算就是对实参的运算,因此可通过参数返回函数运算结果。,引用类型变量和const类型的指针,(2)const类型常量 const=;如:const int PI=3.1415;(3)const类型指针 p*pconst int*p;可变 固定 int*const p;固定 可变const int*const p;固定 固定,例7.1,#include void main(void)int a=100;int*p,*p1,*q;p=,返回,例7.2,#include void main(void)int a1=1,a2=2,a3;int*p1,*p2,*p3;float b1=12.5,b2=25.5;float*fp1,*fp2;p1=,例7.2,返回,例7.3,#include void main(void)int a5=0,1,2,3,4;int*p;p=,返回,例7.4,#include void main(void)int a5=1,2,3,4,5,sum=0;int*p,*p1;p1=a+4;for(p=a;pp1;p+)sum+=*p;cout*pt;cout n sum=sumendl;,返回,例7.5,#include main()int a4=100,200,300,400,b;int*p=,返回,例7.6,#include#define N 5void main(void)int a5=0,1,2,3,4,i,j,*p;for(p=a;pa+N;p+)cout*pt;coutendl;p=a;for(i=0;iN;i+)cout*(p+i)t;coutendl;for(i=0;iN;i+)cout*(a+i)t;coutendl;for(i=0;iN;i+)cout pi t;coutendl;,返回,例7.7,#include void main(void)int a33=1,2,3,4,5,6,7,8,9;int*p=,返回,例7.8,#include void main(void)int a33=1,2,3,4,5,6,7,8,9;for(int i=0;i3;i+)couta i=ai=,返回,例7.9,#include void main(void)int a33=1,2,3,4,5,6,7,8,9;for(int i=0;i3;i+)cout/输出元素aij的值,返回,例7.10,#include#include void main(void)char*p1=I am a student;char s130,s230;strcpy(s1,p1);char*p2=s2;while(*p!=0)*p2=*p1;p1+;p2+);*p2=0;couts1=s1endl;couts2=s2endl;,返回,例7.11,#include void swap(float*p,flaot*q)float temp;temp=*p;*p=*q;*q=temp;void main(void)float x=10.5,y=20.5;coutx=xty=yendl;swap(,返回,例7.12,#include void str_cpy(char*p1,char*p2)/用指针变量为形参 while(*p1+=*p2+);void main(void)char str180,str280;char*q1=str1,*q2=str2;coutString2:;cin.getline(str2,80);str_cpy(q1,q2);/用指针变量为实参 coutString1:str1endl;,返回,例7.13(1),#include int max1(int a,int n)/形参为数组名 int i,max=a0;for(i=1;imax)max=ai;return max;int max2(int*p,int n)/形参为指针 int i,max=*(p+0);for(i=1;imax)max=*(p+i);return max;,例7.13(2),int max3(int a,int n)/形参为数组名 int i,max=*(a+0);for(i=1;imax)max=*(a+i);return max;int max4(int*p,int n)/形参为指针 int i,max=p0;for(i=1;imax)max=pi;return max;,例7.13(3),void main(void)int b=1,3,2,5,4,6,*pi;coutmax1=max1(b,6)endl;/实参为数组名,形参为数组 coutmax2=max2(b,6)endl;/实参为数组名,形参为指针变量 pi=b;coutmax3=max3(pi,6)endl;/实参为指针变量,形参为数组 pi=b;coutmax4=max4(pi,6)endl;/实参为指针变量,形参指针变量,返回,例7.14(1),#include void sort1(int a,int n)/形参为数组名 int i,j,temp;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;void sort2(int*p,int n)/形参为指针 int i,j,temp;for(i=0;in-1;i+)/使用选择法降序排序 for(j=i+1;jn;j+)if(*(p+i)*(p+j)temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;,例7.14(2),void sort3(int a,int n)/形参为数组名 int i,j,k,temp;for(i=0;i*(a+j)k=j;if(ki)temp=*(a+i);*(a+i)=*(a+k);*(a+k)=temp;,例7.14(3),void sort4(int*p,int n)/形参为指针 int i,j,k,temp;for(i=0;ii)temp=pi;pi=pk;pk=temp;,例7.14(4),void main(void)int a6=1,3,2,5,4,6,*p,i;sort1(a,6);/实参为数组名,形参为数组 for(i=0;i6;i+)coutait;coutendl;sort2(a,6);/实参为数组名,形参为指针变量 for(i=0;i6;i+)coutait;coutendl;,例7.14(5),p=a;sort3(p,6);/实参为指针变量,形参为数组 for(i=0;i6;i+)coutait;coutendl;p=a;sort4(p,6);/实参为指针变量,形参指针变量 for(i=0;i6;i+)coutait;coutendl;,返回,例7.15,#include void main(void)int i;char c34=ABC,DEF,GHI;char*pc3=c0,c1,c2;for(i=0;i3;i+)coutci=ci=pcin;,返回,例7.16,#include#include void main(void)char c520,char*s5,*pc;int i,j;coutsi;for(i=0;i0)pc=si;si=sj;sj=pc;for(i=0;i5;i+)coutsit;coutendl;for(i=0;i5;i+)coutcit;,返回,例7.17(1),#include void main(void)int i,j,sum=0;int a33,(*p)3;/定义指向一维数组的指针变量 p cout(*p)j;/用(*p)j输入aij的值,例7.17(2),for(p=a;pa+3;p+)for(j=0;j3;j+)sum+=(*p)j;/等价于sum+=aij;coutsum=sumendl;输入a33各元素值:123456789sum=45,返回,例7.18(1),#include int sum(int(*p)3,int m)/形参p为指向一维数组的指针变量 int i,j,sum=0;for(i=0;im;i+)for(j=0;j3;j+)sum+=(*p)j;/(*p)j表示aij的元素值 p+;/p+后,p将指向下一行 return sum;,例7.18(2),void main(void)int i,j,a33;coutaij;coutsum=sum(a,3)endl;/实参为行指针,输入a33各元素值:123456789sum=45,返回,例7.19,#include int*max(int x,int y)/定义返回指针的函数 int z=xy?x:y;return/*p(=z)表示最大值单元的内容9程序执行后输出:max=9,返回,例7.20,#include char*str_cat(char*p1,char*p2)char*p3=p1;/将目标串首地址赋给指针变量p。while(*p1+);/指针p1移到s1的串尾 p1;while(*p1+=*p2+);/将源串s2中的字符依次复制到目标串s1中。return p3;/返回指向目标串首地址的指针p。void main(void)char s1200,s2100,*p;cout输入第一个字符串:;cin.getline(s1,100);cout输入第二个字符串:;cin.getline(s2,100);cout“拼接后的字符串:”;p=str_cat(s1,s2);coutpendl;/将字符串s2拼接到字符串s1后输出s1的内容。,返回,例7.21(1),#include#include char*encrypt(char*pstr)/定义加密函数为返回指针值的函数 char*p=pstr;/保存字符串首地址到指针变量p while(*pstr)if(*pstr=48/返回字符串指针,例7.21(2),void main(void)char s80;cin.getline(s,80);/输入字符串到数组s cout encrypt(s)endl;/将字符串加密后输出 程序执行时输入:123ABCabc 加密后输出:!#*+,fgh,返回,例7.22(1),#include#include float f1(float x)return(1+x);float f2(float x)return(x/(1+x*x);float f3(float x)return(x+x*x)/(1+cos(x)+x*x);,例7.22(2),void main(void)float y1,y2,y3;float(*pf)(float x);/定义函数指针变量pf pf=f1;/将函数f1入口地址赋给函数指针变量pf y1=pf(1);/用函数指针变量pf调用函数pf(1),计算f1(1)的值 pf=f2;/将函数f2入口地址赋给函数指针变量pf y2=pf(1);/用函数指针变量pf调用函数pf(1),计算f2(1)的值 pf=f3;/将函数f3入口地址赋给函数指针变量pf y3=pf(1);/用函数指针变量pf调用函数pf(1),计算f3(1)的值 couty1=y1ty2=y2ty3=y3endl;程序执行后输出:y1=2y2=0.5y3=0.787308,返回,例7.23(1),#include#include float f1(float x)return(1+x);float f2(float x)return(x/(1+x*x);float f3(float x)return(x+x*x)/(1+cos(x)+x*x);,例7.23(2),float integral(float(*f)(float),float a,float b,int n)float y,h;int i;y=(f(a)+f(b)/2;h=(b-a)/n;for(i=1;in;i+)y+=f(a+i*h);return(y*h);,例7.23(3),void main(void)float s1,s2,s3;s1=integral(f1,1,4,1000);s2=integral(f2,0,1,1000);s3=integral(f3,1,3,1000);couts1=s1ts2=s2ts3=s3endl;,返回,例7.24,#include void main(void)int i,n,sum=0;coutn;int*p=new intn;/动态分配由n个整型元素组成的一维数组,首地址赋p coutpi;/给n个元素赋值。for(i=0;in;i+)sum+=pi;/计算n个元素和 coutsum=sumendl;delete np;/动态归还p所指一维数组内存空间,返回,例7.25,#include void swap(int,返回,

    注意事项

    本文(C++程序设计第7章指针.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开