procedure swap (var m:integer;var n:integer); var i:integer; begin i:=m; m:=n; n:=i; end ▣swap(a,b) 。把a,b的地址送到已知单元j1和i2中 m:=j1; n:=j2 ● i:=m个; m:=nf; 1饮;头学计算机系602教研室
国防科技大学计算机系602教研室 procedure swap (var m:integer; var n: integer); var i:integer; begin i:=m; m:=n; n:=i; end ❑ swap(a,b) • 把a,b的地址送到已知单元j1和j2中 • m:=j1; • n:=j2; • i:=m↑; • m↑:= n↑; • n↑:=i;
参数传递方式 二.得结果 ■传地址的一种变形 ■】 方法: 口每个形参对应两个形式单元,第一个形式单元 存放实参地址,第二个单元存放实参的值。 ▣在过程体中对形式参数的任何引用或赋值都看 作对它的第二个单元的直接访问。 口过程完成返回前把第二个单元的内容存放到第 一个单元所指的实参单元中。 ■有些Fortran采用这种方式; 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 参数传递方式 二.得结果 ◼ 传地址的一种变形 ◼ 方法: 每个形参对应两个形式单元,第一个形式单元 存放实参地址,第二个单元存放实参的值。 在过程体中对形式参数的任何引用或赋值都看 作对它的第二个单元的直接访问。 过程完成返回前把第二个单元的内容存放到第 一个单元所指的实参单元中。 ◼ 有些Fortran采用这种方式;
参数传递方式 三.传值 ■把实在参数的值传递给相应的形式参数 ·方法: 口调用段预先把实在参数的的值计算出来并放 在被调用段可以拿到的地方; 口被调用段开始工作时,首先把实参的值抄入 形式参数相应的单元; ▣被调用段中,象引用局部数据一样引用形式 单元。 ■ PASCAL的值参数 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 参数传递方式 三.传值 ◼ 把实在参数的值传递给相应的形式参数 ◼ 方法: 调用段预先把实在参数的的值计算出来并放 在被调用段可以拿到的地方; 被调用段开始工作时,首先把实参的值抄入 形式参数相应的单元; 被调用段中,象引用局部数据一样引用形式 单元。 ◼ PASCAL的值参数
参数传递方式 四.传名 ■过程调用的作用相当于把被调用段的过程 体抄到调用出现的地方,但把其中任一出 现的形式参数都替换成相应的实参。 ■方法: 口在进入被调用段的之前不对实在参数预先进 行计值,而是让过程体中每当使用到相应的 形式参数时才逐次对它实行计值(或计算地 址)。因此,通常把实在参数处理成一个子 程序(称为参数子程序),每当过程体中使 用到相应的形式参数时就调用这个子程序。 所科大学千机系602黄研
国防科技大学计算机系602教研室 参数传递方式 四.传名 ◼ 过程调用的作用相当于把被调用段的过程 体抄到调用出现的地方,但把其中任一出 现的形式参数都替换成相应的实参。 ◼ 方法: 在进入被调用段的之前不对实在参数预先进 行计值,而是让过程体中每当使用到相应的 形式参数时才逐次对它实行计值(或计算地 址)。因此,通常把实在参数处理成一个子 程序(称为参数子程序),每当过程体中使 用到相应的形式参数时就调用这个子程序
PROGRAM EX var A:integer; PROCEDURE P(B:integer) var A:integer; BEGIN A:=0; B:=B+1; A:=A+B; BEGIN END; A:=2; TA:=0; BEGIN A:=A+1; A:=2; TA:=TA+A; P(A)月 write(A); write(A); END END 算机系602教研室
国防科技大学计算机系602教研室 PROGRAM EX … var A:integer; PROCEDURE P(B:integer) … var A:integer; BEGIN A:=0; B:=B+1; A:=A+B; END; BEGIN A :=2; TA:=0; A:= A +1; TA:=TA+ A; write(A); END BEGIN A:=2; P(A); write(A); END