c课件c06指针.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c课件c06指针

面向对象程序设计实践 第6章 指针 主要内容 指针变量的概念 指针的概念 指针的操作 动态内存管理 传递指针参数 数组与指针 函数与指针 引用 数组、字符串与指针编程实例 1 指针变量及其操作 1.1指针的概念 指针就是地址 32位系统,1个程序有4G字节的内存空间 每个字节都对应一个地址,从0到 0xFFFFFFFF 32位系统,地址可以用一个32位二进制数表示 定义一种变量,这种变量就存放这个地址,这种变量就叫指针(pointer) 1.1指针的概念 定义指针变量的一般形式 1.1 指针的概念 1.2指针的操作 取地址运算 1.2指针的操作 取内容运算 1.2指针的操作 取内容运算 1.2指针的操作 指针的前后移动 指针可以进行+和-的算术运算,表示指针向前、向后移动。 p+n就表示p向前移动n*sizeof(type)个字节,反之亦然。 1.2指针的操作 指针的赋值操作 1.2指针的操作 指针相减 1.3空指针 C++中的0 整型字面量0 字符串结尾的空字符’\0’ 逻辑量false 空指针 空指针表示哪里也不指。也可以理解为4G内存中最低的那个地址0 传统C中定义了一个宏变量NULL表示空指针(#define NULL 0),在C++中,空指针直接写0 1.4 无类型指针void * void *表示没有类型的指针,它只能表示这个变量中存储着一个地址,但对这个地址的其它信息一无所知 它只能赋值给其它void *,或是和其它void *比较是否相等,不能做其它任何操作 void *可以通过其它指向对象类型的指针赋值而得到 void *通常只会用于系统底层的实现中,一般用于表达某些硬件资源,在应用级的程序中都不应该出现void * 1.5动态内存管理 除了将指针指向已经存在的变量外,也可以在堆区动态分配变量。 动态分配变量用new运算符。 1.5动态内存管理 1.6指针常量和指向常量的指针 指向常量的指针 1.6指针常量和指向常量的指针 指针常量 1.6指针常量和指向常量的指针 判别方法 2 函数参数传递——传地址 为什么以传值方式传递函数参数 最小化函数与外部的耦合 保证函数不会修改外部参数的值,函数只有一个返回值,没有副作用 缺点:复杂数据类型复制开销很大 将变量的指针作为参数传递给函数(传地址) 可以提高效率。对于复杂数据类型,如vector或string,或大数组,传递变量的首地址,在函数调用时,只复制一份指针变量,指向同一对象,避免了复制对象的过程,从而提高运行效率。 可以修改传入参数的值。 2 函数参数传递——传地址 提高效率 3 数组和指针 3.1数组名和数组元素访问 数组名实际上就是数组的首地址,它就是一个指针常量 下标操作符就和取内容操作符就是一回事*(v+9)和v[9]完全等价(实际上,编译器会把后者转换为前者) 3.1数组名和数组元素访问 利用指针遍历数组 3.2传递数组 数组名就是一个指针,可以作为函数参数传递 3.3用指针操作字符串 3.3用指针操作字符串 3.3用指针操作字符串 3.3用指针操作字符串 3.4 多维数组,指针数组,指向指针的指针 多维数组 二维数组 实际上是一个有5个元素的一维数组,其中每个元素都是另一个数组的首地址。实际上就是一个指针变量的一维数组 3.4 多维数组,指针数组,指向指针的指针 指针数组 3.4 多维数组,指针数组,指向指针的指针 3.4 多维数组,指针数组,指向指针的指针 3.4 多维数组,指针数组,指向指针的指针 指向指针的指针 4 函数和指针 指针和函数的关系 指针变量作为函数参数 函数返回一个指针变量 使用指向函数的指针 4 函数和指针 4.1返回指针的函数 一般形式 4.2 指向函数的指针 定义函数指针的一般形式 4.2 指向函数的指针 4.2 指向函数的指针 5 引用 5.1引用reference的概念 引用是C++替代指针的机制 引用就是一个变量的别名 引用只有一个操作,就是初始化它 引用变量在定义时必须初始化 初始化之后,对这个引用做的任何操作都实际上施加在它所引用的那个对象上 5.1引用的概念 5.2传递引用参数 5.2传递引用参数 5.2传递引用参数 5.3返回引用的函数 相比返回指针的函数,没有内存泄漏的问题 但是其它问题,与返回指针的函数相同 编写返回引用的函数一定要谨慎 6 编程示例 例1: 选择排序(第5章习题2) 6 编程示例 例2:向数组中插入元素(第5章第4题) 6 编程示例 6 编程示例 6 编程示例 例3:实现数组顺序反转(第5章第5题) 6 编程示例 6 编程示例 例4:二分查找(第5章第8题) 6 编程示例 例5:判断回文 6 编程

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档