【文章內(nèi)容簡介】
( 1)老 SP值; ( 2)返回地址; (3)全局 DISPAY地址; ( 4)調(diào)用時的棧頂單元地址,老 TOP。 3. 參數(shù)個數(shù)和形式單元 4. DISPAY表。 5. 過程所轄的各分程序的局部數(shù)據(jù)單元。 對于每個分程序來說,它們包括: ( 1)分程序的 TOP值。當進入分程序時它含現(xiàn)行棧頂?shù)刂罚院?,用來定義棧的新高度(分程序的 TOP值); ( 2)分程序的局部變量, 數(shù)組內(nèi)情向量和臨時工作單元。 變 量 e B5 的 T O P 數(shù) 組 C 的 內(nèi) 情 向 量 變 量 e 和 d B4 的 T O P B2的 T OP 數(shù) 組 B 的 內(nèi) 情 向 量 變 量 zK B1 的 T O PD D I S P L A Y6 形 式 單 元 m ,n5 參 數(shù) 個 數(shù): 24 調(diào) 用 時 的 棧 頂 地 址 (老 T O P )3 全 局 D I S P L A Y 地 址2 返 回 地 址1 老 S P0 過 程 的 T O P ,指 向 活 動 記 錄 之 頂B 的 內(nèi) 情 向 量 Z B1的 T O PD I S P L A Y D I S P L A Y 形式單元 m , n 2 形式單元 m , n 2連 接 數(shù) 據(jù) 連 接 數(shù) 據(jù) A 的 T O P A 的 T O P ∶ ∶ ∶ ∶( a ) ( b)( a ) 到 達 標 號 B1處 。 ( b) 進 入 分 程 序 B1。B Z B 1 T O 數(shù) 組 B 數(shù) 組 B e d B2 2 的 T O P B 的 內(nèi) 情 向 量 B 的 內(nèi) 情 向 量 z z B1 的 T O P B 1 的 T O P D I S P L A Y D I S P L A Y 形式單元 m,n 2 形式單元 m,n 2 連 接 數(shù) 據(jù) 連接 數(shù) 據(jù) A 的 T O P A 的 T O P ∶ ∶ ∶ ∶ (c) (d) (c ) 數(shù)組 B 分配之后; ( d )進入分程序 B2 2 。 數(shù) 組 C 數(shù) 組 C 數(shù) 組 B 數(shù) 組 B C 的 向 量 內(nèi) 情 eB5的 T O PC 的 內(nèi) 情 向 量B4的 T O PB4 的 T O PB 的 內(nèi) 情 向 量B 的 內(nèi) 情 向 量 z Z B1的 T O PB1 的 T O P D I S P L A YD I S P L A Y 形式單元 m , n 2 形式單元 m , n 2連接數(shù)據(jù)連 接 數(shù) 據(jù) A 的 T O PA 的 T O P ∶ ∶ ∶ ∶ ( e ) ( f)( e ) 進入分程序 B4分配數(shù)組 C 之后; ( f ) 進入分程序 B5 。 參數(shù)傳遞 (1)procedure exchangel(i,j:integer)。 (2) var x:integer。 (3) begin。 (4) x:=a[i]。 a[i]:=a[j]。 a[j]:=x (5) end。 帶有非局部變量和形參的 PASCAL過程 非局變量 a[i]和 a[j]的 值進行交換, i,j為形參(在這里是傳值) (1)program reference(input,output)。 (2)var a,b:integer。 (3)procedure swap({var} x,y:integer)。 (4) var temp:integer。 (5) begin (6) temp:=x。 (7) x:=y。 (8) y:=temp (9) end。 (10)begin (11) a:=1。 b:=2。 (12) swap(a,b)。 (13) writeln(?a=?,a)。writeln(?b=?,b) (14)end. 帶有過程 swap的 PASCAL程序 ? 傳地址(變量參數(shù)) 例如:過程 swap(var x,y:integer)。 swap(a,b);( a,b為 調(diào)用時的 實參 ) 調(diào)用結果 a,b的值被改變。 ? 傳值(值調(diào)用) 特點是對形式參數(shù)的任何運算不影響實參的值。 例如:過程 swap(x,y:integer)。 swap(a,b); 其結果: a,b調(diào)用前的值不改變。 傳值 的實現(xiàn) ? ,即在被調(diào)過程的活動記錄中開辟了形參的存儲空間,這些存儲位置即是我們所說的形式單元(用以存放實參)。 ? ,并將其放在對應形式單元開辟的空間中。 ? ,就像使用局部變量一樣使用這些形式單元。 procedure swap( x,y:integer)。 var temp:integer。 begin temp:=x。 x:=y; y:=temp end; 調(diào)用 swap(a,b) 過程將不會影響 a和 b的值。 其結果等價于執(zhí)行下列運算: x :=a; y :=b; temp :=x; x :=y; y :=temp 傳地址 的實現(xiàn) ( call by reference )(callbyaddress)(callbylocation) 把實在參數(shù)的地址傳遞給相應的形參,即 調(diào)用過程把一個指向實參的存儲地址的指針傳遞給被調(diào)用過程相應的形參: 1實在參數(shù)是一個名字,