指针和引用学习.pptx

上传人:莉*** 文档编号:73781824 上传时间:2023-02-22 格式:PPTX 页数:37 大小:146.59KB
返回 下载 相关 举报
指针和引用学习.pptx_第1页
第1页 / 共37页
指针和引用学习.pptx_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《指针和引用学习.pptx》由会员分享,可在线阅读,更多相关《指针和引用学习.pptx(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、8.1 8.1 指针和指针变量指针和指针变量指针的概念指针变量的说明第1页/共37页指针的概念指针的概念 指针:一个变量的地址,一个内存单元的地址。变量的地址:该变量所占存储单元的首地址。变量的值:内存单元中的内容。变量地址的表示:&变量名。&:取地址运算符。指针变量:专门存放变量地址的变量。第2页/共37页指针变量的说明指针变量的说明 指针变量与其他类型的变量一样,必须先说明后使用,说明格式为:存储类型类型变量名1,变量名2;其中,存储类型是可任选的;变量名前的星号指明所说明的变量为指针变量;而类型则指出指针变量所指向的数据类型。1.指针的类型 从语法的角度看,只要把指针声明语句里的指针名字

2、去掉,剩下的部分就是这个指针的类型。2.指针所指向的数据类型 当通过指针来访问指针所指向的内存区域时,指针所指向的类型决定数据类型。了编译器将把那片内存区里的内容当做什么来看待。第3页/共37页8.2 8.2 指指 针针 运运 算算指针的赋值运算指针的算术运算指针的关系运算第4页/共37页指针的赋值运算指针的赋值运算指针赋值运算常见的形式如下。(1)将一个变量的地址以&运算的结果形式赋给一个同类型的指针。(2)将另一同类型的指针值赋给某一指针 (3)在C+中可以将0赋给任一指针变量,其含义是初始化指针变量,使其值为“空”。例8-1 指针的赋值运算 例8-2 指针的赋值运算 例8-3 指针的赋值

3、运算第5页/共37页指针的算术运算指针的算术运算 左值所能进行的算术运算有两种:一是指针变量与一个整数的加或减运算;二是自增、自减运算。1.与整数的加或减运算 如果指针变量的定义为 datatype*p;p初始地址值为DS,那么p+n=DS+nsizeof(datatype)。指针加法的单位是指针对应类型的字节数。例8-4 与整数的加或减运算2.指针的自增或自减 指针的自增或自减表示指针从当前位置向后或向前移动sizeof(数据类型)长度的存储单元,指向下一个或上一个元素 例8-5 指针的自增或自减第6页/共37页指针的关系运算指针的关系运算 指针变量可以进行关系运算,两个指针变量的关系运算是

4、根据两个指针变量值的大小(作为无符号整数)来进行比较的,通常只有同类型的指针变量进行比较才有意义。相等(=)比较的含义是判断两个指针变量是否指向相同的内存单元,即两个指针值是否相同;而不等比较(、=)的含义是判断两个指针变量是否指向不同的内存单元 在C+中,同一个符号可能表示不同的运算符。编译器根据运算符的优先级、操作数的类型及个数来区分的。例8-6 指针的关系运算 例8-7 混合运算及其优先级第7页/共37页8.3 8.3 指针和数组指针和数组指针与一维数组指针与多维数组指针和字符串第8页/共37页指针与一维数组指针与一维数组 如图8.3所示,定义一个数组a10和一个指针pa。int a 1

5、0,*pa;pa=a;/A pa=&a 0;/B A、B行的效果是一样的,都是把数组的首地址赋给指针。引用一个数组元素,有3种方法:(1)下标法:ai。(2)数组名地址法:*(a+i)。(3)指针法:指针地址法:*(pa+i)指针下标法:pai图8.3 一维数组与指针示意图例8-8 一维数组与指针第9页/共37页指针与多维数组指针与多维数组 在C+中,二维数组的各个元素值按行的顺序在一片连续的内存空间中存放。行数组首地址a,相当于&a0。行元素ai 即为*(a+i),实际为各列数组首地址。各列数组首地址ai,相当于&ai0。列元素地址&aij,可用 ai+j或者*(a+i)+j表示。图8.4所

6、示为二维数组与指针的关系示意图。图8.4 二维数组与指针关系示意图例8-9 二维数组与指针例8-10 用指针变量输出二维数组第10页/共37页指针和字符串指针和字符串用字符指针表示字符串有3种方法:(1)指向字符数组,让字符指针与存放字符串的字符数组关联,就可以用字符指针表示该字符串。(2)直接定义指针并初始化,让它指向指定的字符串。(3)直接将字符串常量赋予字符指针 例8-11 指针与字符串第11页/共37页8.4 8.4 指针数组和多级指针指针数组和多级指针指针数组指向一维数组的指针变量多级指针第12页/共37页指针数组指针数组 指针数组是指针变量的集合,它的每一个元素都是一个指针,且具有

7、相同的数据类型。其一般的定义格式为:存储类型 *;数据类型是指针所指向变量的数据类型。因为“”的优先级高于“*”,指针与构成一个数组,再与*结合,指明是一个指针数组,数据类型指明指针数组中每个元素所指变量的类型。例8-13 指针数组输出 例8-14 将字符串降序后输出第13页/共37页指向一维数组的指针变量指向一维数组的指针变量 可以声明一个指针变量使其只能指向一维数组,声明的格式为:要注意这样两种写法:int*p4;/定义了一个指针数组,该数组有4个指针元素 int(*p)4;/定义了一个指针,该指针指向一个有4个元素的数组 因为运算符的优先级高于*,所以用圆括号()将*与指针变量名括起来以

8、改变运算符的优先级顺序,使*先作用于指针变量,然后再与结合,形成指向一维数组的指针变量。例8-15 指向一维数组的指针变量第14页/共37页多级指针多级指针 如果指针变量中存放的是另一个指针的地址,就称该指针变量为指向指针的指针变量。指向指针的指针变量也称为二级指针。其声明的语法格式为:*两个符号*表示后面声明的变量为指向指针的指针变量。例8-16 通过多级指针访问指针数组元素 例8-17 多级指针的简单应用第15页/共37页8.5 8.5 指针和函数指针和函数指针作为函数的参数返回指针的函数指向函数的指针带参数的main()main()函数第16页/共37页指针作为函数的参数指针作为函数的参

9、数 当形参为指针时,实参可以是一个基类型相同的指针变量或变量的地址。当函数的参数为指针时,可将指针值和指针所指向的数据作为函数的输入参数,即在函数体内可使用指针值和指针所指向的数据值。也可将指针所指向的数据作为函数的输出参数,即在函数体内改变了形参指针所指向的数据值,调用函数后,实参指针所指向的数据也随之改变。例8-18 用值传递和地址传递实现两个数据的交换 例8-19 形参为指针、实参为数组名和指针 例8-20 形参为数组名,实参为数组名和指针第17页/共37页返回指针的函数返回指针的函数 函数的返回值可以为整型、实型、双精度型、字符型数据,也可以为指针,返回指针值的函数的定义方法如下:类型

10、说明符 *函数名(参量表列)函数体其中类型说明符为函数返回的指针指向的数据类型。例8-21 返回指针的函数 例8-22 利用函数求两个一维数组对应元素之和第18页/共37页指向函数的指针指向函数的指针 编译器为每个函数确定一个入口地址,当调用该函数时,系统会从这个“入口地址”开始执行函数。存放函数的入口地址的指针就是一个指向函数的指针,简称为函数指针。定义函数指针的格式为:(*)();注意在定义指向函数的指针变量假设为p时,(*p)两侧的括号不可省略,表示p 先与*结合,它是指针变量,然后再与后面的()结合,表示此指针变量指向函数;否则将与返回指针的函数相混淆。第19页/共37页指向函数的指针

11、指向函数的指针 例8-23 指向函数的指针 例8-24 用指向函数的指针实现比较大小的运算 例8-25 从任意类型的数组中找出最大元素第20页/共37页带参数的带参数的main()main()函数函数 为执行一个可执行文件而在操作系统提示符下输入的命令叫命令行。命令行一般语法形式:命令名 参数1 参数2.参数n 带参数的main()函数形式:main(int argc,char *argv).形参名任意,习惯上使用argc和argv,其中argc为命令行中参数的个数(包括可执行文件名),而argv为一字符指针数组,元素个数随命令行参数而定,每个指针数组元素都指向命令行中的一个参数。例8-26

12、带参数的main()函数第21页/共37页8.6 new8.6 new和和deletedelete运算符运算符和deletedelete运算符的用法使用newnew和deletedelete运算符的注意事项第22页/共37页和和deletedelete运算符的用法运算符的用法1.new操作符的使用 C+提供了操作符new和new来创建动态变量。(1)new用来动态创建单个变量。语法格式为:new (2)可以在申请内存空间时,同时对该内存空间初始化。(3)new用来创建动态变量数组,语法格式为:2.delete操作符的使用 (1)delete 。释放所指向的内存空间。对应上面的第一点,释放时用语

13、句:delete p;/释放p所指向的内存空间 (2)delete 或者 delete 例8-27 动态实现内存分配和撤销第23页/共37页使用使用newnew和和deletedelete运算符的注意事项运算符的注意事项 两个运算符,应注意以下几点。(1)用new运算符分配的存储空间,其初值是不确定的。(2)用new运算符分配空间后,要判断指针的值是否为0。若为0,表示动态分配内存失败。(3)定义一个指针,动态分配数组时,不能对数组进行初始化。(4)当new运算符计算的指针类型与赋值运算符左操作数类型不一致时,必须进行强制类型装换。(5)用new运算符分配的内存空间,该指针不能随意指向别的空间

14、;否则,当指针已不再指向用new运算符分配的内存空间时,delete会出错。(6)不需要时一定要及时归还给操作系统,让操作系统能够分配给其他需要内存的指针。第24页/共37页8.7 8.7 引用和其他类型的指针引用和其他类型的指针引用类型变量的说明和使用函数的引用传递类型变量型指针第25页/共37页引用类型变量的说明和使用引用类型变量的说明和使用 在C+中引入引用类型的主要目的是为了在函数的参数传递时提供方便。引用类型主要用作函数的参数或用作函数的返回值类型。定义一个引用类型变量的一般格式为:&=int a;int&aa=a;定义了一个引用类型的变量aa,它是变量a的别名。例8-28 利用类型

15、变量的使用示例 第26页/共37页函数的引用传递函数的引用传递1.引用作为函数的参数 引用可以作为函数的参数,建立函数参数的引用传递方式。传递引用实际上传递的是变量的地址,这一点与指针是一样的,但是这种传递方式避免了传递大量数据带来的额外空间开销,从而节省大量存储空间,减少了程序运行的时间。2.函数的返回值为引用类型 当函数的返回值为引用类型时,它的返回值一定是某一个变量的别名。例8-29 函数的引用传递 例8-30 函数的返回值为引用类型第27页/共37页类型变量类型变量1.定义const型常量 const int DeadLine=365;const float A=1.00009;用co

16、nst定义的标识符常量时,一定要对其初始化。2.const型指针 const是一个左结合的类型修饰符,用于指针的有以下几种情况。(1)将const放在指针变量的类型的前面:constint*A;表示指针变量A可变,指针所指向的数据*A不可变。(2)将const放在指针变量的*的后面:int*const A;表示指针A不可变,但指针变量所指向的数据*A可变,在定义时必须赋初值。(3)将一个const放在指针变量的类型的前面,将另一个const放在指针变量的*的后面:constint*const A;/表示指针变量所指向的值是一个常量,即指针A可变,指针所指向的数据也是一个常量,*A也不可变。在定

17、义时必须赋初值。例8-31 const型指针示例之一第28页/共37页型指针型指针说明void型指针的语法格式为:void*;其中,“指针变量”可指向任何类型的数据,可将任何地址赋给指针变量。实际使用void型指针时,只有通过强制类型转换才能使void型指针得到具体变量的值。在没有转换前,void型指针不能进行指针的算术运算。例8-33 void型指针使用错误的示例 例8-34 强制类型转换后使用void型指针示例第29页/共37页8.8 8.8 简简 单单 链链 表表链表概述建立链表链表的输出链表的插入链表的删除第30页/共37页链表概述链表概述 链表是一种物理存储单元上非连续、非顺序的存储

18、结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。链表的结构如图8.11所示。图8.11 链表结构示意图第31页/共37页建立链表建立链表 创建链表的基本步骤如下:第一步,创建第一个节点,并将此节点的内存地址保存 第二步,创建第二个节点,将第二个节点的首地址保存在第一个节点的成员变量中。第三步,以此类推,创建第n个节点,并将此节点的地址存储到第n-1节点的成员变量中。例8-35 建立无序链表的函数第32页/共37页链表的输出链表的输出 链表的输出步骤如下:(1)找到表头。(2)若是非空表,输出节点的值成员,是空

19、表则退出。(3)跟踪链表的增长,即找到下一个节点的地址。例8-36 链表的输出第33页/共37页链表的插入链表的插入 在链表中插入节点的基本步骤如下:第一步,获得第一个节点的地址。第二步,找到插入节点的位置。第三步,创建新的节点InsertNode。第四步,将当前节点的下一节点信息存储到新创建节点InsertNode的成员变量。第五步,将InsertNode的地址存储到当前节点的成员变量中。第六步,结束。例8-37 链表的插入第34页/共37页链表的删除链表的删除删除链表的基本步骤如下:第一步,获得第一个节点的地址。第二步,根据第一个节点获得第二个节点地址。第三步,调用free函数释放第一个节点。第四步,根据第二个节点获得第三个节点地址。第五步,调用free函数释放第二个节点。第六步,以此类推从头到尾删除所有的对象。例8-38 删除链表上某一个节点 例8-39 完整的链表程序第35页/共37页8.9 8.9 类类 型型 定定 义义定义新类型标识符的一般格式为:typedef类型标识符1,标识符2;其中,类型是标准的类型名(如int、float等),或是用户自定义的类型名(如结构体、共用体等),或是已定义的新类型标识符。经类型定义后,该标识符可以作为类型说明符或者作为强制类型标识符来使用。第36页/共37页感谢您的观看!第37页/共37页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com