子程序及其实现方式

子程序及其实现方式

ID:34461960

大小:53.66 KB

页数:7页

时间:2019-03-06

子程序及其实现方式_第1页
子程序及其实现方式_第2页
子程序及其实现方式_第3页
子程序及其实现方式_第4页
子程序及其实现方式_第5页
资源描述:

《子程序及其实现方式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、子程序及其实现方式引言随着程序设计语言的逐步发展,代码的规模越来越大。不管是在传统的面向过程的,还是随后的面向数据的,乃至现在的面向对象的程序设计中,过程抽象和数据抽象在提高代码的可读性、复用性方面起着重要的作用,因此是解决程序设计复杂性的利器。子程序就是过程抽象的一个方式。子程序的主要作用是对某个子功能具体的实现细节进行封装。利用子程序,我们可以有效的使主程序从复杂的各种实现中抽象出来,使得整体的思路更加的清晰。我们还可以对多出重复出现的相同功能的代码段进行封装,提高代码的复用性。一、子程序的基本概念1.1函数与过程过程:过程实际上是一个语句序列,在这个序列中可以访问

2、非局部变量,以及通过在建立在形参和实参之间的单向或者双向通道来进行对调用程序的变量的值的修改。函数:函数在语义上是数学函数的模拟,通常情况下函数没有因为别名等而产生的副作用。也就是说函数只是通过返回值对调用程序产生影响。在大多数的程序设计语言中提供了函数和过程,但是在C和C++中只有函数。但是这个函数和上面定义的函数不是严格的一样,倒是和过程很类似。1.2程序名、实参、形参在程序设计语言中,在进行子程序调用之前必须对子程序进行声明和定义。在C++中声明和定义可以是分开的,但是在java中两者同时进行。程序的声明包括告诉编译器子程序的名称、以及参数。在子程序头出现的参数称

3、为形参。在调用程序中向子程序传递的与形参对应的参数称为实参。1.3子程序设计中的几个常见问题首先最明显的一个问题是子程序对与非局部变量的访问方式,是采用静态作用于还是动态作用域。其次,参数传递的实现方式多种多样,具体选择哪种实现。再其次,子程序的局部环境的性质,最主要的是局部变量是栈动态的还是静态的。如果是静态的就不能进行递归调用。最后是子程序的重载和通用子程序的问题。一、子程序的局部引用环境在子程序中也可以变量定义,在子程序中定义的变量叫做局部变量。局部变量的实现可以是栈动态的也可以是静态的。2.1栈动态如果局部变量是栈动态的,意味着在子程序被调用之前这些变量并没有被

4、绑定到内存空间。具体的绑定发生在子程序开始执行时,然后在子程序终止执行时解除绑定。栈动态变量的优点有下面几个方面:I.子程序的灵活性更高,例如可以进行递归调用。II.局部变量的存储空间可以被共享。在早期内存空间相对较小时这点很重要。但是在现代大容量内存的环境下已不是很明显。栈动态的主要缺点是:I.在每次调用的时候都要进行存储空间的分配和绑定,结束时都要进行空间的释放。这一个过程是一个很大的开销。II.通过栈动态实现的变量被放置与栈中,具体的地址只有在运行时才能确定。因此对栈变量的访问是一个间接寻址的过程,而对静态变量的访问可以通过直接寻址实现。通常情况下,间接寻址的代价

5、比直接寻址的要高。2.2静态静态方式指的是在程序被加载和链接之后,变量就已经被绑定到存储空间。与栈动态相比最大的优点是效率比较高。原因是静态的没有动态的一个内存分配和释放的代价,同时更是直接寻址。在C和C++除非变量被static修饰的是静态变量,否则都是栈动态的。Pascal、Ada和Java只有栈动态的方式。FORTRAN90中用户可以自己选择是栈动态还是静态。二、参数传递的方法3.1参数传递的语义模型参数传递方式指的是参数被传递到子程序,或者从子程序获取的方式。参数传递从语义上讲将有三种模型:输入性、输出型和输入输出型。输入型指的是形参可以接受对应的实参的数据。输

6、出型指的是形参的数据可以传送到相应的实参。输入输出型指的是两者的功能的结合。3.1.1输入型的实现3.1.1.1按值传递按值传递指的是用对应的实参的值对形参进行初始化。想要实现按值传递的语义,我们一般有两种实现的方式:①实际数据的传递,这种情况下形参和局部变量一样需要被绑定到额外的存储空间。然后将实参的值拷贝到新分配的存储空间。因此在实参数据比较大的情况下比如一个较大的数组,这种拷贝的代价比较高。②传递一条通往调用程序中实参的路径,这种传递方式不需要分配额外的空间给形参,一般只是保存实参的一个地址。但是在输入型语义的要求下,该形参必须是写保护的。否则可能会造成变量别名的

7、副作用。3.1.2输出型的实现3.1.2.1按结果传递按结果传递实现的是输出型语义。在这种情况下,在子程序开始执行时,实参的值并不传递给形参。但是在子程序终止时形参的值必须传递给实参。与按值传递一样我们也有相同的两种实现:实际数据传递和通过传递存储路径。实际数据传递遇到的问题和按值传递相同,需要额外的存储空间。3.1.3输入输出的实现3.1.3.1按值与结果传递在按值与结果传递中实现的方式一般是将实际值进行传递。形参具有额外分配的空间。在子程序被调用时将实参的值按输入型的方式传递给形参。在子程序终止时,按输出型的方式将值从形参传递给实参。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。