图10.22 嵌套过程作为参数传递 |
(1) program param(input, output);
//例程param的头
(2) procedure b(function h(n:integer): integer);
//嵌套过程b的头,其形式参数是一个具有一个整型形参n的整型函数h
(3) begin writeln(h(2)) end {b};//b的过程体
(4) procedure c; //嵌套过程c的头
(5) var :integer;
(6) function f(n;integer): integer;
//过程c中嵌套定义的具有一个整型形参n的整型函数f
(7) begin f∶= +n
end{f};//f的函数体
(8) begin ∶=0;b(f)
end{c};
//c的过程体,其中b(f)调用b函数,
//而实参是函数f,调用时替换形参函数h
(9) begin
(10) c
(11) end |
图10.23 连同存取链一起传递过程实参 |
 |
一般来讲,过程P把过程T做为实参传递给Q时,也是一种"传地址"方式,P可以先建立两个相继的临时单元,第一个单元B1存放过程T的入口地址;第二单元B2存放现行display地址或存取链地址。然后把第一临时单元地址传送给Q(即放置于Q活动记录的形式单元,比方说Z中)。假定过程Q执行到引用形参Z时,Z中已含有上述B1的地址,则B1的内容将用来作为转子指令的目的地址(即转进过程T)。B2的内容将传送给T。
除了实参是过程的情况外,还有实参为数组的情况,实参为标号的情况以及实参为形式参数的情况。我们不再讨论。 |