題組內容
四、有一個程式如下圖所示,請回答下列問題:(20 分)
procedure Confuse is
X : Integer;
Y : Integer;
Z : Integer;
procedure Sub1 is
Z : Integer;
begin
…X…
…Y…
…Z…
end;
procedure Sub2 is
X : Integer;
begin
Sub1;
end;
begin
Sub2;
end;
⑵如果是使用 Dynamic Scope,則 Sub1 內 X、Y、Z 這三個變數的範圍該如何處理?
詳解 (共 1 筆)
詳解
在 Sub1 中:
X:引用 Sub2 中的 X。
Y:引用 Confuse 中的 Y。
Z:引用 Sub1 自己的局部變數 Z。
詳細的變數範圍處理步驟
Confuse 中的變數 X、Y、Z 被初始化。
Sub2 被調用,並在 Sub2 的範圍內定義了一個新的 X。
Sub2 調用了 Sub1。
Sub1 開始執行,並在 Sub1 的範圍內定義了一個新的局部變數 Z。
當 Sub1 需要訪問 X 時,會先查找調用堆疊中的最近定義的 X,即 Sub2 中的 X。
當 Sub1 需要訪問 Y 時,會查找調用堆疊中的最近定義的 Y,即 Confuse 中的 Y,因為 Sub2 中沒有定義 Y。
當 Sub1 需要訪問 Z 時,會使用 Sub1 自己的局部變數 Z。
Y:引用 Confuse 中的 Y。
Z:引用 Sub1 自己的局部變數 Z。
詳細的變數範圍處理步驟
Confuse 中的變數 X、Y、Z 被初始化。
Sub2 被調用,並在 Sub2 的範圍內定義了一個新的 X。
Sub2 調用了 Sub1。
Sub1 開始執行,並在 Sub1 的範圍內定義了一個新的局部變數 Z。
當 Sub1 需要訪問 X 時,會先查找調用堆疊中的最近定義的 X,即 Sub2 中的 X。
當 Sub1 需要訪問 Y 時,會查找調用堆疊中的最近定義的 Y,即 Confuse 中的 Y,因為 Sub2 中沒有定義 Y。
當 Sub1 需要訪問 Z 時,會使用 Sub1 自己的局部變數 Z。