欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《指针和引用》PPT课件.ppt

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

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

    《指针和引用》PPT课件.ppt

    第8章 指针和引用本章主要内容8.1 8.1 指针和指针变量指针和指针变量8.2 8.2 指指 针针 运运 算算8.3 8.3 指针和数组指针和数组8.4 8.4 指针数组和多级指针指针数组和多级指针8.5 8.5 指针和函数指针和函数8.6 new8.6 new和和deletedelete运算符运算符8.7 8.7 引用和其他类型的指针引用和其他类型的指针8.8 8.8 简简 单单 链链 表表8.9 8.9 类类 型型 定定 义义8.1 指针和指针变量8.1.1 8.1.1 指针的概念指针的概念8.1.2 8.1.2 指针变量的说明指针变量的说明8.1.1 指针的概念 指针:一个变量的地址,一个内存单元的地址。变量的地址:该变量所占存储单元的首地址。变量的值:内存单元中的内容。变量地址的表示:&变量名。&:取地址运算符。指针变量:专门存放变量地址的变量。8.1.2 指针变量的说明 指针变量与其他类型的变量一样,必须先说明后使用,说明格式为:存储类型类型变量名1,变量名2;其中,存储类型是可任选的;变量名前的星号指明所说明的变量为指针变量;而类型则指出指针变量所指向的数据类型。1.指针的类型 从语法的角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。2.指针所指向的数据类型 当通过指针来访问指针所指向的内存区域时,指针所指向的类型决定数据类型。了编译器将把那片内存区里的内容当做什么来看待。8.2 指 针 运 算8.2.1 8.2.1 指针的赋值运算指针的赋值运算8.2.2 8.2.2 指针的算术运算指针的算术运算8.2.3 8.2.3 指针的关系运算指针的关系运算8.2.1 指针的赋值运算指针赋值运算常见的形式如下。(1)将一个变量的地址以&运算的结果形式赋给一个同类型的指针。(2)将另一同类型的指针值赋给某一指针 (3)在C+中可以将0赋给任一指针变量,其含义是初始化指针变量,使其值为“空”。例8-1 指针的赋值运算 例8-2 指针的赋值运算 例8-3 指针的赋值运算8.2.2 指针的算术运算 左值所能进行的算术运算有两种:一是指针变量与一个整数的加或减运算;二是自增、自减运算。1.与整数的加或减运算 如果指针变量的定义为 datatype*p;p初始地址值为DS,那么p+n=DS+nsizeof(datatype)。指针加法的单位是指针对应类型的字节数。例8-4 与整数的加或减运算2.指针的自增或自减 指针的自增或自减表示指针从当前位置向后或向前移动sizeof(数据类型)长度的存储单元,指向下一个或上一个元素 例8-5 指针的自增或自减8.2.3 指针的关系运算 指针变量可以进行关系运算,两个指针变量的关系运算是根据两个指针变量值的大小(作为无符号整数)来进行比较的,通常只有同类型的指针变量进行比较才有意义。相等(=)比较的含义是判断两个指针变量是否指向相同的内存单元,即两个指针值是否相同;而不等比较(、=)的含义是判断两个指针变量是否指向不同的内存单元 在C+中,同一个符号可能表示不同的运算符。编译器根据运算符的优先级、操作数的类型及个数来区分的。例8-6 指针的关系运算 例8-7 混合运算及其优先级8.3 指针和数组8.3.1 8.3.1 指针与一维数组指针与一维数组8.3.2 8.3.2 指针与多维数组指针与多维数组8.3.3 8.3.3 指针和字符串指针和字符串8.3.1 指针与一维数组 如图所示,定义一个数组a10和一个指针pa。int a 10,*pa;pa=a;/A pa=&a 0;/B A、B行的效果是一样的,都是把数组的首地址赋给指针。引用一个数组元素,有3种方法:(1)下标法:ai。(2)数组名地址法:*(a+i)。(3)指针法:指针地址法:*(pa+i)指针下标法:pai图8.3 一维数组与指针示意图例8-8 一维数组与指针8.3.2 指针与多维数组 在C+中,二维数组的各个元素值按行的顺序在一片连续的内存空间中存放。行数组首地址a,相当于&a0。行元素ai 即为*(a+i),实际为各列数组首地址。各列数组首地址ai,相当于&ai0。列元素地址&aij,可用 ai+j或者*(a+i)+j表示。图所示为二维数组与指针的关系示意图。图8.4 二维数组与指针关系示意图例8-9 二维数组与指针例8-10 用指针变量输出二维数组8.3.3 指针和字符串用字符指针表示字符串有3种方法:(1)指向字符数组,让字符指针与存放字符串的字符数组关联,就可以用字符指针表示该字符串。(2)直接定义指针并初始化,让它指向指定的字符串。(3)直接将字符串常量赋予字符指针 例8-11 指针与字符串8.4 指针数组和多级指针8.4.1 8.4.1 指针数组指针数组8.4.2 8.4.2 指向一维数组的指针变量指向一维数组的指针变量8.4.3 8.4.3 多级指针多级指针8.4.1 指针数组 指针数组是指针变量的集合,它的每一个元素都是一个指针,且具有相同的数据类型。其一般的定义格式为:存储类型 *;数据类型是指针所指向变量的数据类型。因为“”的优先级高于“*”,指针与构成一个数组,再与*结合,指明是一个指针数组,数据类型指明指针数组中每个元素所指变量的类型。例8-13 指针数组输出 例8-14 将字符串降序后输出8.4.2 指向一维数组的指针变量 可以声明一个指针变量使其只能指向一维数组,声明的格式为:要注意这样两种写法:int*p4;/定义了一个指针数组,该数组有4个指针元素 int(*p)4;/定义了一个指针,该指针指向一个有4个元素的数组 因为运算符的优先级高于*,所以用圆括号()将*与指针变量名括起来以改变运算符的优先级顺序,使*先作用于指针变量,然后再与结合,形成指向一维数组的指针变量。例8-15 指向一维数组的指针变量8.4.3 多级指针 如果指针变量中存放的是另一个指针的地址,就称该指针变量为指向指针的指针变量。指向指针的指针变量也称为二级指针。其声明的语法格式为:*两个符号*表示后面声明的变量为指向指针的指针变量。例8-16 通过多级指针访问指针数组元素 例8-17 多级指针的简单应用8.5 指针和函数8.5.1 8.5.1 指针作为函数的参数指针作为函数的参数8.5.2 8.5.2 返回指针的函数返回指针的函数8.5.3 8.5.3 指向函数的指针指向函数的指针8.5.4 8.5.4 带参数的带参数的main()main()函数函数8.5.1 指针作为函数的参数 当形参为指针时,实参可以是一个基类型相同的指针变量或变量的地址。当函数的参数为指针时,可将指针值和指针所指向的数据作为函数的输入参数,即在函数体内可使用指针值和指针所指向的数据值。也可将指针所指向的数据作为函数的输出参数,即在函数体内改变了形参指针所指向的数据值,调用函数后,实参指针所指向的数据也随之改变。例8-18 用值传递和地址传递实现两个数据的交换 例8-19 形参为指针、实参为数组名和指针 例8-20 形参为数组名,实参为数组名和指针8.5.2 返回指针的函数 函数的返回值可以为整型、实型、双精度型、字符型数据,也可以为指针,返回指针值的函数的定义方法如下:类型说明符 *函数名(参量表列)函数体其中类型说明符为函数返回的指针指向的数据类型。例8-21 返回指针的函数 例8-22 利用函数求两个一维数组对应元素之和8.5.3 指向函数的指针 编译器为每个函数确定一个入口地址,当调用该函数时,系统会从这个“入口地址”开始执行函数。存放函数的入口地址的指针就是一个指向函数的指针,简称为函数指针。定义函数指针的格式为:(*)();注意在定义指向函数的指针变量假设为p时,(*p)两侧的括号不可省略,表示p 先与*结合,它是指针变量,然后再与后面的()结合,表示此指针变量指向函数;否则将与返回指针的函数相混淆。8.5.3 指向函数的指针 例8-23 指向函数的指针 例8-24 用指向函数的指针实现比较大小的运算 例8-25 从任意类型的数组中找出最大元素8.5.4 带参数的main()函数 为执行一个可执行文件而在操作系统提示符下输入的命令叫命令行。命令行一般语法形式:命令名 参数1 参数2.参数n 带参数的main()函数形式:main(int argc,char *argv).形参名任意,习惯上使用argc和argv,其中argc为命令行中参数的个数(包括可执行文件名),而argv为一字符指针数组,元素个数随命令行参数而定,每个指针数组元素都指向命令行中的一个参数。例8-26 带参数的main()函数8.6 new和delete运算符8.6.1 new8.6.1 new和和deletedelete运算符的用法运算符的用法8.6.2 8.6.2 使用使用newnew和和deletedelete运算符的注意事项运算符的注意事项8.6.1 new和delete运算符的用法操作符的使用 C+提供了操作符new和new来创建动态变量。(1)new用来动态创建单个变量。语法格式为:new (2)可以在申请内存空间时,同时对该内存空间初始化。(3)new用来创建动态变量数组,语法格式为:操作符的使用 (1)delete 。释放所指向的内存空间。对应上面的第一点,释放时用语句:delete p;/释放p所指向的内存空间 (2)delete 或者 delete 例8-27 动态实现内存分配和撤销8.6.2 使用new和delete运算符的注意事项 两个运算符,应注意以下几点。(1)用new运算符分配的存储空间,其初值是不确定的。(2)用new运算符分配空间后,要判断指针的值是否为0。若为0,表示动态分配内存失败。(3)定义一个指针,动态分配数组时,不能对数组进行初始化。(4)当new运算符计算的指针类型与赋值运算符左操作数类型不一致时,必须进行强制类型装换。(5)用new运算符分配的内存空间,该指针不能随意指向别的空间;否则,当指针已不再指向用new运算符分配的内存空间时,delete会出错。(6)不需要时一定要及时归还给操作系统,让操作系统能够分配给其他需要内存的指针。8.7 引用和其他类型的指针8.7.1 8.7.1 引用类型变量的说明和使用引用类型变量的说明和使用8.7.2 8.7.2 函数的引用传递函数的引用传递8.7.3 const8.7.3 const类型变量类型变量8.7.4 void8.7.4 void型指针型指针8.7.1 引用类型变量的说明和使用 在C+中引入引用类型的主要目的是为了在函数的参数传递时提供方便。引用类型主要用作函数的参数或用作函数的返回值类型。定义一个引用类型变量的一般格式为:&=int a;int&aa=a;定义了一个引用类型的变量aa,它是变量a的别名。例8-28 利用类型变量的使用示例 8.7.2 函数的引用传递1.引用作为函数的参数 引用可以作为函数的参数,建立函数参数的引用传递方式。传递引用实际上传递的是变量的地址,这一点与指针是一样的,但是这种传递方式避免了传递大量数据带来的额外空间开销,从而节省大量存储空间,减少了程序运行的时间。2.函数的返回值为引用类型 当函数的返回值为引用类型时,它的返回值一定是某一个变量的别名。例8-29 函数的引用传递 例8-30 函数的返回值为引用类型8.7.3 const类型变量1.定义const型常量 const int DeadLine=365;const float A=1.00009;用const定义的标识符常量时,一定要对其初始化。2.const型指针 const是一个左结合的类型修饰符,用于指针的有以下几种情况。(1)将const放在指针变量的类型的前面:constint*A;表示指针变量A可变,指针所指向的数据*A不可变。(2)将const放在指针变量的*的后面:int*const A;表示指针A不可变,但指针变量所指向的数据*A可变,在定义时必须赋初值。(3)将一个const放在指针变量的类型的前面,将另一个const放在指针变量的*的后面:constint*const A;/表示指针变量所指向的值是一个常量,即指针A可变,指针所指向的数据也是一个常量,*A也不可变。在定义时必须赋初值。例8-31 const型指针示例之一8.7.4 void型指针说明void型指针的语法格式为:void*;其中,“指针变量”可指向任何类型的数据,可将任何地址赋给指针变量。实际使用void型指针时,只有通过强制类型转换才能使void型指针得到具体变量的值。在没有转换前,void型指针不能进行指针的算术运算。例8-33 void型指针使用错误的示例 例8-34 强制类型转换后使用void型指针示例8.8 简 单 链 表8.8.1 8.8.1 链表概述链表概述8.8.2 8.8.2 建立链表建立链表8.8.3 8.8.3 链表的输出链表的输出8.8.4 8.8.4 链表的插入链表的插入8.8.5 8.8.5 链表的删除链表的删除8.8.1 链表概述 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。链表的结构如图所示。图8.11 链表结构示意图8.8.2 建立链表 创建链表的基本步骤如下:第一步,创建第一个节点,并将此节点的内存地址保存 第二步,创建第二个节点,将第二个节点的首地址保存在第一个节点的成员变量中。第三步,以此类推,创建第n个节点,并将此节点的地址存储到第n-1节点的成员变量中。例8-35 建立无序链表的函数8.8.3 链表的输出 链表的输出步骤如下:(1)找到表头。(2)若是非空表,输出节点的值成员,是空表则退出。(3)跟踪链表的增长,即找到下一个节点的地址。例8-36 链表的输出8.8.4 链表的插入 在链表中插入节点的基本步骤如下:第一步,获得第一个节点的地址。第二步,找到插入节点的位置。第三步,创建新的节点InsertNode。第四步,将当前节点的下一节点信息存储到新创建节点InsertNode的成员变量。第五步,将InsertNode的地址存储到当前节点的成员变量中。第六步,结束。例8-37 链表的插入8.8.5 链表的删除删除链表的基本步骤如下:第一步,获得第一个节点的地址。第二步,根据第一个节点获得第二个节点地址。第三步,调用free函数释放第一个节点。第四步,根据第二个节点获得第三个节点地址。第五步,调用free函数释放第二个节点。第六步,以此类推从头到尾删除所有的对象。例8-38 删除链表上某一个节点 例8-39 完整的链表程序8.9 类 型 定 义定义新类型标识符的一般格式为:typedef类型标识符1,标识符2;其中,类型是标准的类型名(如int、float等),或是用户自定义的类型名(如结构体、共用体等),或是已定义的新类型标识符。经类型定义后,该标识符可以作为类型说明符或者作为强制类型标识符来使用。

    注意事项

    本文(《指针和引用》PPT课件.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开