局部引用环境例子.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

*9.3参数传递严格局部的数据对象只能在单一的局部引用环境中被操作。然而,有时需要一个数据对象被多个子程序共享。数据对象可以在子程序间以显式参数传递,但有时这种方式是麻烦的。如:考虑一组子程序共享一个公共的数据表,则参数传递是烦琐的。数据共享通常是基于标识符关联的共享。如:子程序P、Q、R需要访问同一变量X,则简单地允许X在每个子程序中有相同关联。X的关联变成某个子程序的局部环境的一部分,并成为其它子程序非局部环境的公共部分。*共享数据的基本方式通过非局部环境共享数据对象是一种重要的方式。语言中有4种基本的非局部环境方法:①显式的公共环境或隐蔽的非局部环境,②基于动态作用域;③基于静态作用域;④基于继承*参数和参数传递显式传递参数和结果是主要的数据共享方法。作为参数传递的数据对象和结果被不赋名字地传递。在接收子程序中,每个数据对象被给定一个新的局部名。这种共享方式对子程序的每次调用被给定不同数据的情形是非常有用的。*参数和参数传递基本概念:形参和实参、及其对应方式参数传递的基本方法参数传递的语义参数传递的实现例子*参数和参数传递实参和形参Argument(参数、自变量):指作为操作数传递给子程序或原操作数据对象。可通过参数或非局部引用得到。Result(结果):操作执行结束后返回的数据对象或值。通过参数,非局部变量赋值或显式函数值返回。*参数:形参和实参形参(formalparameter):子程序中的一种特殊局部数据对象。子程序定义通常在头部列出形参的名字和声明作为规约的一部分。形参名是简单标识符,声明给出其类型和其它属性。例,C过程头 SUB(intX;charY);实参(actualparameter):和调用子程序共享的数据对象。实参可以是属于调用者的局部数据,也可以是调用者的形式参数,也可是调用者可见的非局部数据对象,或者也可以是函数返回结果被立即传递给被调用子程序。实参在子程序调用点表示为表达式,称为实参表达式。通常,子程序被调用时,实参表达式被计值,计值结果作为实参传递,然后再进入子程序。当然,也有特例,表达式不计值而直接传递。*参数和参数传递建立对应调用子程序时,需建立实参表和形参表间的对应,有两个方法:位置对应:根据各自的位置对实参和形参配对。由显式的名字对应在调用语句中,和每个实参配对的形参被显式地命名。例:SUB?(Y→B,X→27)大多数语言采用位置配对。返回*传递参数的方法实参和形参的关联通常有两个途径:先计值实参,然后将值传给形参。或实际数据对象被传给形参。传递参数的方法按名调用按引用调用按值调用按值—结果调用按常量值调用按结果调用*参数传递:按名调用将子程序调用视为子程序体的全部替换,每个形参代表特定实参的实际计值。每次形参引用需要对应的实参的实际计值。在子程序调用点,实参不计值,直至它在子程序中被实际引用时才计值。按名调用在ALGOL语言中扮演了重要角色,具有重要理论意义,但执行开销大。基本的按名调用规则可用替代来陈述:在子程序开始执行前,将子程序体中的形参均用实参替代。*参数传递:按名调用这种替代带来的问题:对调用callSub(X),Y是形参,X是实参。在Sub执行前,用X替代Y,但X的关联可能不在Sub的关联中。因此,用X替代我们还必须指出对X的不同引用环境,如果X已对Sub可见,则还可能带来含混性。实现的基本技术是将实参处理为简单的无参数子程序(称为thunks)*参数传递:按引用调用这是最常见的参数传递机制,即将指向数据对象位置的指针传给子程序,数据对象本身并不改变其在存储中的位置。子程序执行开始时,实参的左值被用于初始化形参的局部存储位置。传递参数以两步进行:1、在调用子程序序中,每个实参表达式被计值,以给一个指针到实参数据对象。这样的指针表被存放在公共存储区域,可被被调用子程序访问,然后,控制传给子程序。2、在被调用子程序中,指向实参的指针表被访问以查找实参合适的右值。在子程序执行中,对形参名的引用被处理为一般的局部变量引用。子程序终止时,结果也通过实参数据对象返回。*参数传递:按值调用也称按拷贝调用(callbycopy),实参的值被传递给形参,其实现类似于按引用调用,除了:按引用调用传递左值,而按值调用传递右值。按引用调用参数使用存放在形参中的左值去访问实际数据对象。而在按值调用中,形参中包含了被使用的值。一旦实际参数被接值传递,形参对实参不再会访问并修改其值。*参数传递:按值—结果调用形参是和实参同类型的局部变量。调用时,实参的右值被拷贝进形参,效果上相当于显式的赋

您可能关注的文档

文档评论(0)

178****2168 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档