第三章 引用和结构.ppt_第1页
第三章 引用和结构.ppt_第2页
第三章 引用和结构.ppt_第3页
第三章 引用和结构.ppt_第4页
第三章 引用和结构.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章引用和结构1 引用的概念 引用是个别名 当建立引用时 程序用另一个变量或对象的名字初始化它 从这时起 引用作为目标的别名而使用 对引用的改动实际就是对目标的改动 为建立引用 先写上目标的类型 后跟引用运算符 例 2 引用的操作 如果程序寻找引用的地址 它只能找到所引用的目标的地址 C 没有提供访问引用本身地址的方法 因为它与指针或其他变量的地址不同 它没有任何意义 引用在建立时就初始化 而且总是作为目标的别名使用 即使在应用地址操作符时也是如此 引用一旦初始化 它就维系在一定的目标上 再也不分开 任何对该引用的赋值 都是对引用所维系的目标赋值 而不是将引用维系到另一个目标上 例 引用和指针有很大的差别 指针是个变量 可以把它再赋值成指向别处的地址 然而 建立引用时必须进行初始化 并且决不会再关联其它不同的变量 3 引用的对象 若一个变量声明为T 无意义 4 用引用传递函数参数 传递引用给函数与传递指针的效果一样 传递的是原来的变量或对象 而不是在函数作用域内建立变量或对象的副本 例使用指针传递方式的函数调用时 函数的语法相对传值方式来说比较累赘 函数内部大量使用指针 调用函数需要传递变量地址 使函数内部的工作对用户太过显然 引用具有指针的威力 但是调用引用传递的函数时 可读性却比指针传递好 引用具有传值方式函数调用语法的简单性和可读性 但是威力却比传值方式强 引用存在的问题 引用隐藏了函数所使用的参数传递的类型 所以无法从所看到的函数调用判断其是值传递还是引用传递 可能引发错误 函数只能返回一个值 如果需要传递多个值 可以用引用给函数传递多个参数 然后由函数往目标中填入正确的值 这一策略绕过了函数的返回值 使得可以把返回值保留给函数 来报告运行成败或错误原因 例用引用返回值 函数返回值时 要生成一个值的副本 而用引用返回值时 不生成值的副本 例 5 用const限定引用 传递指针和引用更大的目的是效率 当一个数据类型很大 如自定义类型 时 因为传值要复制副本 所以不可取 传递指针和引用存在传值所没有的危险 程序有时候不允许传递的指针所指向的值被修改或者传递的引用被修改 但传递的地址特征使得所传的参数处于随时被修改的危险之中 保护实参不被修改的方法是传递const指针和引用 引用是c 独有的特性 指针存在种种问题 间接引用指针会使代码可读性差 编程容易出错 引用正好扬弃了指针 引用的使用中 单纯取个别名是毫无意义的 引用的目的主要用于函数参数传递中 解决大对象的传递效率和空间都不如意的问题 引用能够保证参数传递中不产生副本 从而发挥指针的威力 提高传递的效率 通过const的使用 保证了引用传递的安全性 例 6 结构的定义 结构由struct关键字定义 通常声明在所有函数之外 位于main 函数之前 这样新声明的数据类型在程序的任何地方都可以被使用 例如 structEmployee charname 10 longcode floatsalary charaddress 50 charphone 11 分号是必须的voidmain Employeeperson 定义一个Employee结构的变量 分配变量空间 使用这个结构变量 声明一个结构并不分配内存 内存分配发生在定义这个新数据类型的变量中 访问结构成员 点操作符structEmployee charname 20 longcode floatsalary voidmain Employeelabor labor name LiuXiang labor code 10 1 labor salary 300 cout Name labor name endl cout Salary labor salary endl 结构赋值 includeStructPerson Charname 20 Unsignedlongid Floatsalary Personpr1 FrankVoltaire 12345678 3 38 Voidmain Employeelabor Personpr2 Pr2 pr1 Labor pr1 errorCout pr2 name endl Cout pr2 id endl Cout pr2 salary endl structEmployee Charname 20 Unsignedlongid Floatsalary 7 结构与指针 与数组不同 结构变量不是指针 通过取地址 这里 prPtr name等价于pr1 name等价于 prPtr name 但箭头操作符更直观一些 8 结构与数组 结构是一个数据类型 所以也可以拥有结构数组 要定义结构数组 必须先声明一个结构 然后定义这个结构类型的数组 例如 structPerson charname 20 unsignedlongid floatsalary Personallone 100 定义一个Person类型的数组程序中如果有结构变量的相互交换 在结构很大时 执行效率较差 这时可以建立指针数组 这样交换指针而不是结构本身 运行效率要高得多 Ch10 5 cppch10 6 cpp 9 传送结构参数 传递结构值 结构可以按值传递 这种情况下整个结构值都将被复制到形参中去 传递结构的引用 结构也可以用引用来传递 这种情况下仅仅把结构地址传递给形参 引用传递效率较高 因为它不用传递整个结构变量的值 有时候是很大的空间 节省了传递的时间和存储空间 同时又不影响其功能 程序中引用传递与值传递的差别 只是在函数声明的参数中结构类型名后加上一个 引用声明符 而函数的实现与函数调用代码都与值传递相同 所以引用传递在程序的理解上与值传递一样容易 比指针传递的程序可读性要好 除非是小结构 一般很少按值传递 返回结构 由于结构返回时 要复制结构值给一个临时结构变量 当结构较大时 运行效率会受影响 可以用结构参数引用传递的方法来代替 结构参数引用传递时无须复制结构值 所以不需要赋值操作 链表结构 结构嵌套结构成员不能是自身的结构变量 但可以用自身结构指针作为成员 StructEducation charmajor 20 Chardegree 20 Doublep StructStudent Educationschool charid 20 Intgraduate Student pN Studentss 多点操作 Ch9 1 cpp includevoidmain intintOne int 返回 Ch9 3 cpp includevoidmain intintOne int 返回 Ch9 4 cpp includevoidswap int Ch9 5 cpp includeintfactor int int 返回 Ch9 6 cpp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论