数学讲C变量的引用及指针的使用课件

上传人:痛*** 文档编号:241430083 上传时间:2024-06-25 格式:PPTX 页数:45 大小:480.97KB
返回 下载 相关 举报
数学讲C变量的引用及指针的使用课件_第1页
第1页 / 共45页
数学讲C变量的引用及指针的使用课件_第2页
第2页 / 共45页
数学讲C变量的引用及指针的使用课件_第3页
第3页 / 共45页
点击查看更多>>
资源描述
C+面向对象程序设计普通高等教育“十一五”国家级规划教材中国高等院校计算机基础教育课程体系规划教材谭浩强编著6/25/20241第4讲C+变量的引用及指针的使用变量的引用及指针的使用4.1 授课内容授课内容C+变量的引用及指针的使用变量的引用及指针的使用,包括以下几个主要部分:1.指针的概念和指针变量的定义;2.指针的基本操作;3.指针与数组;4.引用;5.指针与函数;6.返回函数的指针;7.new和delete操作符。6/25/20242第4讲C+变量的引用及指针的使用变量的引用及指针的使用4.2授课要求授课要求1掌握指针、地址、指针类型、void指针、空指针等概念;2掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式;3掌握指针与数组、函数、字符串等的联系;4掌握动态空间操作;5熟悉变量的引用的使用。6/25/20243第4讲C+变量的引用及指针的使用变量的引用及指针的使用4.3授课重点授课重点1指针的概念和应用、变量的引用。4.4授课难点授课难点1指针的概念及函数与指针。6/25/202441指针的概念指针的概念(1)指针的含义:一个)指针的含义:一个变量的地址变量的地址称为该变量的指称为该变量的指针。针。图1变量与地址6/25/202451指针的概念指针的概念指针变量指针变量:如果有一个变量是专门用来存放另一变量存放另一变量地址地址(即指针)的,则它称为指针变量。指针变量的值(即指针变量中存放的值)是地址(即指针)。例如:i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,见图2。下面两个语句作用相同:i=3;*i_pointer=3;图26/25/202461指针的概念指针的概念定义指针变量的一般形式为定义指针变量的一般形式为:基类型基类型*指针变量名;指针变量名;下面都是合法的定义:float*pointer_3;/pointer_3是指向单精度型数据的指针变量char*pointer_4;/pointer_4是指向字符型数据的指针变量6/25/202471指针的概念指针的概念在定义指针变量时要在定义指针变量时要注意注意:(1)不能用一个整数给一个指针变量赋初值。不能用一个整数给一个指针变量赋初值。(2)在定义指针变量时必须指定基类型。在定义指针变量时必须指定基类型。6/25/20248(2)引用指针变量)引用指针变量有两个与指针变量有关的运算符:有两个与指针变量有关的运算符:(1)取地址运算符。取地址运算符。(2)*指针运算符(或称间接访问运算符)。指针运算符(或称间接访问运算符)。例如:例如:&a为变量为变量a的地址,的地址,*p为指针变量为指针变量p所指向的存储单元。所指向的存储单元。6/25/20249(2)引用指针变量)引用指针变量提问:(如图提问:(如图4所示)所示)(1)如果已执行了如果已执行了“pointer_1=&a;”语句,请问语句,请问&*pointer_1的含义是什么?的含义是什么?(2)*&a的含义是什么?的含义是什么?解答:解答:&*pointer_1与与&a相相同,即变量同,即变量a的地址。的地址。“&”和和“*”两个运算符的两个运算符的优先级别相同,但按自右至优先级别相同,但按自右至左方向结合,因此先进行左方向结合,因此先进行*pointer_1的运算,它就是的运算,它就是变量变量a,再执行,再执行&运算。运算。解答:解答:*&a与与a等价等价。先进行先进行&a的运算,得的运算,得a的的地址,再进行地址,再进行*运算,即运算,即&a所指向的变量,所指向的变量,*&a和和a等价。等价。图图46/25/202410举例举例例例1 输入输入a和和b两个整数,按先大后小的顺序输出两个整数,按先大后小的顺序输出a和和b(用指针变量处理用指针变量处理)。#include using namespace std;int main()int*p1,*p2,*p,a,b;cinab;/输入两个整数输入两个整数p1=&a;/使使p1指向指向ap2=&b;/使使p2指向指向bif(ab)/如果如果ab就使就使p1与与p2的值交换的值交换p=p1;p1=p2;p2=p;/将将p1的指向与的指向与p2的指向交换的指向交换couta=a b=bendl;coutmax=*p1 min=*p2endl;return 0;图图5 指针交换图指针交换图6/25/202411举例举例运行情况如下:运行情况如下:4578 a=45 b=78max=78 min=45输入输入a的值的值45,b的值的值78,由于,由于ab,将,将p1的值和的值和p2的的值交换,即将值交换,即将p1的指向与的指向与p2的指向交换。交换前的的指向交换。交换前的情况见图情况见图5(a),交换后的情况见图,交换后的情况见图5(b)。请注意请注意,这个问题的算法是不交换整型变量的值,而,这个问题的算法是不交换整型变量的值,而是是交换两个指针变量的值交换两个指针变量的值。图图56/25/2024122指针作为函数参数指针作为函数参数函数的参数还可以是指针类型函数的参数还可以是指针类型。它的作用是将一个它的作用是将一个变量的地址传送给被调用函数的形参变量的地址传送给被调用函数的形参。比如:比如:void swap(int*p1,int*p2)/函数的作用是将函数的作用是将*p1的值与的值与*p2的值交换的值交换 int temp;temp=*p1;*p1=*p2;*p2=temp;在主程序调用时:在主程序调用时:swap(pointer_1,pointer_2);/pointer_1和和pointer_2为指针类型。为指针类型。6/25/2024133数组与指针数组与指针(1)指向数组元素的指针)指向数组元素的指针一个变量有地址,一个数组包含若干元素,每个数组一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有元素都在内存中占用存储单元,它们都有相应的地相应的地址址。指针变量指向数组元素:指针变量指向数组元素:相当于把某一元素相当于把某一元素的地址放到一个指针变的地址放到一个指针变量中。量中。图图66/25/2024143数组与指针数组与指针比如:比如:int a10;/定义一个整型数组定义一个整型数组aint*p;/定义一个指针变量定义一个指针变量pp=&a0;/将元素将元素a0的地址赋给指针变量的地址赋给指针变量p,使,使p指向指向a0在在C+中,数组名代表数组中第一个元素中,数组名代表数组中第一个元素(即序号为即序号为0的元素的元素)的地址。因此,下面两个语句等价:的地址。因此,下面两个语句等价:p=&a0;和和 p=a;6/25/2024153数组与指针数组与指针在定义指针变量时可以给它赋初值:在定义指针变量时可以给它赋初值:int*p=&a0;/p的初值为的初值为a0的地址的地址也可以写成也可以写成int*p=a;/作用与前一行相同作用与前一行相同如果指针变量如果指针变量p已指向数组中的一个元素,已指向数组中的一个元素,则则p+1指向同一数组中的下一个元素指向同一数组中的下一个元素。如果如果p的初值为的初值为&a0,则:,则:(1)p+i和和a+i就是就是ai的地址的地址,见图,见图6。(2)*(p+i)是是p+i所指向的数组元素,即所指向的数组元素,即ai。6/25/2024163数组与指针数组与指针(2)多维数组与指针)多维数组与指针设有一个二维数组,设有一个二维数组,int a34=1,3,5,7,9,11,13,15,17,18,21,23;a是一个数组名。是一个数组名。a数组包含数组包含3行,即行,即3个元素个元素:a0,a1,a2。每一元素又是一个一维数组每一元素又是一个一维数组,它包,它包含含4个元素个元素(即即4个列元素个列元素),见图,见图7图图7可以认为:可以认为:二维数组是二维数组是“数组数组的数组的数组”,即数组,即数组a是由是由3个一维数组个一维数组所组成的。所组成的。6/25/2024173数组与指针数组与指针a代表的是首行的起始地址,即代表的是首行的起始地址,即&a0。a+1代表代表a1行的首地址,即行的首地址,即&a1。a0,a1,a2既然是一维数组名,而C+又规定了数组名代表数组首元素地址,因此因此a0代表一维数组代表一维数组a0中中0列元素的地址,列元素的地址,即即&a00。a1的值的值是是&a10,a2的值的值是是&a20。地址地址数组的值6/25/2024183数组与指针数组与指针提问:提问:针对图针对图9,有,有int*p;回答:回答:A.如:如:p=a0;则:则:p+1=?;*(p+1)=?B如:如:p=&a00;则:则:p+1=?;*(p+1)=?C如:如:p=a;则:则:p+1=?;*(p+1)=?地址地址数组的值图图9解答:Ap+1=2004,*(p+1)=3;Bp+1=2004,*(p+1)=3;C.p=a;错误错误!error C2440:=:cannot convert from int 22 to int*但可以:但可以:couta;couta+1;couta0+1;结果分别为:结果分别为:2000 、2016和和20046/25/2024194字符串与指针字符串与指针在C+中可以用3种方法访问一个字符串。(1)用字符数组存放一个字符串用字符数组存放一个字符串例2定义一个字符数组并初始化,然后输出其中的字符串。#includeusingnamespacestd;intmain()charstr=IloveCHINA!;coutstrendl;return0;运行时输出:IloveCHINA!6/25/2024204字符串与指针字符串与指针(2)用字符串变量存放字符串)用字符串变量存放字符串例例3 定义一个字符串变量并初始化,然后输出其中的定义一个字符串变量并初始化,然后输出其中的字符串。字符串。#include#include using namespace std;int main()string str=I love CHINA!;coutstrendl;return 0;6/25/2024214字符串与指针字符串与指针(3)用字符指针指向一个字符串)用字符指针指向一个字符串例例4 定义一个字符指针变量并初始化,然后输出它指定义一个字符指针变量并初始化,然后输出它指向的字符串。向的字符串。#include using namespace std;int main()char*str=I love CHINA!;coutstrendl;return 0;对字符串中字符的存取,对字符串中字符的存取,可以用下标方法,也可可以用下标方法,也可以用指针方法。以用指针方法。提问:提问:输出结果是什么?输出结果是什么?1)若若 cout*strendl;2)若若 cout*(str+3)endl;Io6/25/2024225函数与指针函数与指针(1)用函数指针变量调用函数)用函数指针变量调用函数指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数入口地址就称为函数的指针函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。指向函数的指针变量的一般定义形式为指向函数的指针变量的一般定义形式为函数类型函数类型(*指针变量名)(函数形参表);指针变量名)(函数形参表);6/25/2024235函数与指针函数与指针例5求和中的大者。先按一般方法写程序:#includeusingnamespacestd;intmain()int max(int x,int y);/函数声明inta,b,m;cinab;m=max(a,b);/调用函数max,求出最大值,赋给mcoutmax=my)z=x;elsez=y;return(z);6/25/2024245函数与指针函数与指针 可以用一个指针变量指向可以用一个指针变量指向max函数,然后通过该指函数,然后通过该指针变量调用此函数。针变量调用此函数。定义指向max函数的指针变量的方法是:int(*p)(int,int);/p所指向的函数的形参类型/p是指向函数的指针变量/指针变量p指向的函数的类型比较:int max(int,int);/max函数原型可以看出:只是用(*p)取代了max,其他都一样。比较6/25/2024255函数与指针函数与指针现在将上面程序的主函数修改如下:#includeusingnamespacestd;intmain()intmax(intx,inty);/函数声明int(*p)(int,int);/定义指向函数的指针变量pinta,b,m;p=max;/使使p指向函数指向函数maxcinab;m=p(a,b);coutmax=mendl;return0;“p=max;”。的作用是将函数max的入口地址赋给指针变量p。这时,p才指向函数max。见图10。图106/25/2024265函数与指针函数与指针(2)用指向函数的指针作函数参数函数指针变量作为函数的参数,将函数名传给其他函数的形参。这样就可以在调用一个函数的过程中根据给定的不同实参调用不同的函数。例如:利用这种方法可以编写一个求定积分的通用函数,用它分别求5个函数的定积分:每次需要求定积分的函数是不一样的。可以编写一个求定积分的通用函数integral,它有3个形参:下限a、上限b,以及指向函数的指针变量fun。函数原型可写为:函数原型可写为:double integral(double a,double b,double(*fun)(double);该方法,在C语言中用的多,在C+中,用的少。6/25/2024276返回指针值的函数返回指针值的函数一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。返回指针值的函数简称为返回指针值的函数简称为指针函数指针函数。定义指针函数的一般形式为:定义指针函数的一般形式为:类型名类型名*函数名(参数表列)函数名(参数表列);例如:例如:int*a(intx,inty);6/25/2024287指针数组和指向指针的指针指针数组和指向指针的指针(1)指针数组的概念)指针数组的概念 如果一个数组,其元素均为指针类型数据,该数组如果一个数组,其元素均为指针类型数据,该数组称为称为指针数组指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。一维指针数组的定义形式为:一维指针数组的定义形式为:类型名类型名 *数组名数组长度;数组名数组长度;例如:int*p4;inta;则:p0=&a;也可:p1=&a;6/25/2024297指针数组和指向指针的指针指针数组和指向指针的指针(2)指向指针的指针)指向指针的指针指向指针数据的指针,简称为指向指针的指针。可以设置一个指针变量p1,它指向指针变量p2的地址(见图11的(b)。P1就是指向指针型数据的指针变量。例:定义一个指向指针数据的指针变量p1:inta;int*p2=&a;int*p1=&p2;图116/25/2024308有关指针的数据类型有关指针的数据类型表表1 有关指针的数据类型有关指针的数据类型定义定义含义含义int i;定义整型变量定义整型变量int*p;p为指向整型数据的指针变量为指向整型数据的指针变量int an;定义整型数组定义整型数组a,它有,它有n个元素个元素int*pn;定义指针数组定义指针数组p,它由,它由n个指向整型数据的指针元素组成个指向整型数据的指针元素组成int(*p)n;p为指向含为指向含n个元素的一维数组的指针变量个元素的一维数组的指针变量int f();f为带回整型函数值的函数为带回整型函数值的函数int*p();p为带回一个指针的函数,该指针指向整型数据为带回一个指针的函数,该指针指向整型数据int(*p)();p为指向函数的指针,该函数返回一个整型值为指向函数的指针,该函数返回一个整型值int*p;p是是一一个个指指向向指指针针的的指指针针变变量量,它它指指向向一一个个指指向向整整型型数数据据的的指指针针变量变量6/25/2024319指针运算小结指针运算小结(1)指针变量加)指针变量加/减减 一个整数一个整数例如:例如:p+;p-;p+i;p-i;p+=i;p-=i;等。;等。C+规定:一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。如p+i代表这样的地址计算:p+i*d,d为p所指向的变量单元所占用的字节数。这样才能保证p+i指向p下面的第i个元素。6/25/2024329指针运算小结指针运算小结(2)指针变量赋值)指针变量赋值将一个变量地址赋给一个指针变量。如p=&a;/将变量的地址赋给pp=array;/将数组array首元素的地址赋给pp=&arrayi;/将数组array第i个元素的地址赋给pp=max;/max为已定义的函数,将max的入口地址赋给pp1=p2;/p1和p2都是同类型的指针变量,将p2的值赋给p16/25/2024339指针运算小结指针运算小结(3)指针变量可以有空值指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示:p=NULL;实际上NULL代表整数0,也就是使p指向地址为0的单元。这样可以使指针不指向任何有效的单元。任何指针变量或地址都可以与任何指针变量或地址都可以与NULL作相等或不相作相等或不相等的比较等的比较如:如:if(p=NULL)p=p1;6/25/2024349指针运算小结指针运算小结(4)两个指针变量可以相减)两个指针变量可以相减如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数,见图12。假如p1指向a1,p2指向a4,则p2-p1=(a+4)-(a+1)=4-1=3。但p1+p2并无实际意义。图126/25/2024359指针运算小结指针运算小结(5)两个指针变量比较)两个指针变量比较若两个指针指向同一个数组的元素,则可以进行比较。若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量小于指向后面元素的指针变量。如图12中,p1p2,或者说,表达式“p1p2”的值为真,而“p2n;point=newintn;.delete point;注意:注意:当内存中没有足够的当内存中没有足够的空间给予分配时,空间给予分配时,new 运算符返回空指运算符返回空指针针NULL(0)。6/25/202442课后总结课后总结(1)强调指针的概念和基本操作。(2)指针与数组、指针与函数、返回函数的指针。(3)引用。(4)new和delete操作符。6/25/202443p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后谢谢大家荣幸这一路,与你同行ItS An Honor To Walk With You All The Way演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!