【正文】
遞給被調(diào)用過(guò)程的指針的間接引用 procedure swap( x,y:integer)。 begin temp:=x。 procedure swap( x,y:integer)。 ? ,并將其放在對(duì)應(yīng)形式單元開(kāi)辟的空間中。 swap(a,b); 其結(jié)果: a,b調(diào)用前的值不改變。 ? 傳值(值調(diào)用) 特點(diǎn)是對(duì)形式參數(shù)的任何運(yùn)算不影響實(shí)參的值。writeln(‘ b=‘ ,b) (14)end. 帶有過(guò)程 swap的 PASCAL程序 ? 傳地址(變量參數(shù)) 例如:過(guò)程 swap(var x,y:integer)。 (12) swap(a,b)。 (10)begin (11) a:=1。 (7) x:=y。 (4) var temp:integer。 (2)var a,b:integer。 a[j]:=x (5) end。 (4) x:=a[i]。 (2) var x:integer。 數(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 ) 進(jìn)入分程序 B4分配數(shù)組 C 之后; ( f ) 進(jìn)入分程序 B5 。 ( b) 進(jìn) 入 分 程 序 B1。當(dāng)進(jìn)入分程序時(shí)它含現(xiàn)行棧頂?shù)刂?,以后,用?lái)定義棧的新高度(分程序的 TOP值); ( 2)分程序的局部變量, 數(shù)組內(nèi)情向量和臨時(shí)工作單元。 5. 過(guò)程所轄的各分程序的局部數(shù)據(jù)單元。 ,共四項(xiàng): ( 1)老 SP值; ( 2)返回地址; (3)全局 DISPAY地址; ( 4)調(diào)用時(shí)的棧頂單元地址,老 TOP。而過(guò)程體分程序(假定是一個(gè)分程序)當(dāng)作是它所管轄的第 1層分程序。每個(gè)分程序都隸屬于某個(gè)確定的過(guò)程,分程序的層次是相對(duì)于它所屬的那個(gè)過(guò)程進(jìn)行編號(hào)的。這樣,上述的第二個(gè)問(wèn)題便可解決。 為了解決上述問(wèn)題,可采取兩種措施。 例如:如果有一個(gè)從第 5層分程序轉(zhuǎn)出到達(dá)第 1層分程序的標(biāo)號(hào) L,雖然在第 5層分程序工作時(shí)知道 L所屬的層數(shù),我們極易從DISPLAY中獲得第 1層分程序的活動(dòng)記錄基址( SP),但是怎么知道第 1層分程序進(jìn)入時(shí)的 TOP呢?唯一的辦法是從 5,4,3和 2各層順序退出。 二則 ,當(dāng)從內(nèi)層分程序向外層轉(zhuǎn)移時(shí),可能同時(shí)要結(jié)束若干個(gè)分程序。但這種做法是極為低效的。 分程序結(jié)構(gòu)的存儲(chǔ) 分配方案 處理分程序結(jié)構(gòu)存儲(chǔ)分配方案的一種簡(jiǎn)單辦法是,把分程序看成 “無(wú)參過(guò) 程”,它在哪里定義就在哪里被調(diào)用。 end。 1 B5:begin real e。 L3: 2 end。 array B[m:n]。 integer m,n。 ? 一個(gè)過(guò)程被調(diào)用時(shí),從調(diào)用過(guò)程的DISPLAY表中自下向上抄錄 n個(gè) SP值,再加上本層的 SP值。 end /* Q*/ call Q ?? Q(z)。 主 ?? p roc Q (b)。 程序結(jié)構(gòu)圖 ?? proc R( c , d)。 2. 用 DISPLAY表。 ? 設(shè)法跟蹤每個(gè)外層過(guò)程的最新活動(dòng)記錄 AR的位置。 ? (實(shí)現(xiàn))一個(gè)過(guò)程可以引用它的任一外層過(guò)程的最新活動(dòng)記錄中的某些數(shù)據(jù)。 ? proc Q ? …… ? end Q。? 實(shí)參 (形式單元)? 返回值 (對(duì)函數(shù)) (有時(shí)可使用寄存器存放返回值) 簡(jiǎn)單的棧式分配方案 ? 程序結(jié)構(gòu)特點(diǎn) :過(guò)程定義不嵌套,過(guò)程可遞歸調(diào)用,含可變數(shù)組 。? 局部變量 (數(shù)據(jù))? 保存運(yùn)行過(guò)程前的狀態(tài) (返回地址,寄存器值??)? 存取鏈 (可選) 對(duì)于非局部量的引用。A [l 1:u 1, l 2:u 2,?? , ln : un] l1 u1 l2 u2 : : t y pe a (首地址) n C ? 過(guò)程活動(dòng)記錄 AR :為說(shuō)明方便,假定程序是由過(guò)程組成,過(guò)程區(qū)分為源文本,運(yùn)行時(shí)稱(chēng)作過(guò)程的激活。 ? end。 ? ? begin ? ? begin real z。 ? 可變 (動(dòng)態(tài) )數(shù)組: 若一個(gè)數(shù)組所需的存儲(chǔ)空間的大小在編譯時(shí)就已知道,則稱(chēng)它為確定數(shù)組,