Download presentation
Presentation is loading. Please wait.
1
第三章 變數與繫結 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
2
2 大綱 變數的定義 變數元件 儲存區配置問題 參考的透明性 完全計算 捷徑計算 繫結 (binding) 繫結時間 精選習題
3
3 變數的定義 變數是由四個元件所組成 名稱 (name) 屬性 (attribute) 引用 (reference) 值 (value)
4
4 變數元件 名稱 變數的名字 並非所有的變數都是有名稱的,有的變數是沒 有名稱的,如指標變數 (pointer variable) 的名稱 僅是引用 (reference) 該變數的方式,並非真正 的名稱,此類變數稱為不具名變數 (anonymous variable) 。
5
5 變數元件 屬性 屬性即為型態,代表變數的性質 如整數、實數、字元、字串及布林值等等 變數的屬性有的程式語言是在設計程式時決定, 如 Pascal ;有些則是在執行的時候決定,如 SNOBOL
6
6 變數元件 引用 即指變數的儲存位址 詳細內容請見第二節之內容
7
7 變數元件 值 變數的值 以 C 語言的 “int x = 1;” 敘述來作為範例,此敘述 表示宣告一個名稱為 x 的變數,其屬性為整數 而值為 1 ,但其在記憶體中的位址則需視系統 是利用靜態儲存區配置或動態儲存區配置才能 決定系統會於何時配置記憶體空間給變數 x 使 用
8
8 儲存區配置問題 靜態儲存區配置 (static storage allocation) 代表程式執行前,配置記憶體空間給變數 如 Fortran , Cobol , Pascal 的全域變數與 PL/1 的 static 記 憶指令 可加速執行的速度。 動態儲存區配置 (dynamic storage allocation) 代表程式執行時,配置記憶體空間給變數 如 Algol 60 , APL , LISP , Snobol 與 Pascal 的區域變數 可增加執行時的彈性,但執行速度較慢
9
9 參考的透明性 referential transparency 意義 程式執行的過程中, 計算運算式 (expression) 後, 應 只能得到一個值, 不能更改或破壞原來執行的環 境這種現象便是參考的透明性
10
10 完全計算 complete circuit evaluation 指對運算式作求值動作時,必需做完整個 運算式才可得出最後的結果,如此的計算 方式便稱為完全計算
11
11 捷徑計算 short circuit evaluation short cut evaluation 指對運算式 ( 通常是指布林運算式 ) 作求值 動作時,無需做完整個運算式即可得出最 後的結果
12
12 捷徑計算範例 A1×A2×A3×……×A100 若 A1 為 0 ,則 A1×A2×A3×……×A100 之結果為 0 ,不需將整個運算式計算完畢再決定最後的 結果值 A and B and C 若 A 為 false 則運算式的結果為 false ,不需將整 個運算式計算完畢再決定最後的結果值 A or B or C 只要 A 為 true 則整個運算式的結果就為 true ,不 需將整個運算式計算完畢再決定最後的結果值
13
13 捷徑計算 各種語言對 “ 捷徑計算 ” 的處理方式 內定 (default) 法 PASCAL 內定採用完全計算 若在程式段中加入 “{$B-}” 敘述,則在該敘述後之所有布林 運算式將採用捷徑計算 若利用 “{$B+}” 則可恢復完全計算 C 與 C++ 則內定採用捷徑計算 運算子 (operator) 法 ADA 利用 AND THEN 及 OR ELSE 代表採用捷徑計算 A OR ELSE B OR ELSE C 及 A AND THEN B AND THEN C AND 及 OR 則是代表採用完全計算 JAVA 利用 || 及 && 代表採用捷徑計算,而 | 及 & 則是代表採 用完全計算。
14
14 繫結 (binding) 意義 繫結是指變數的名稱與其位址, 屬性或值相結合 的動作
15
15 繫結時間 程式語言設計時的繫結 程式語言所提供的所有可能資料型態 所有符號的意義等等 程式語言製作時的繫結 所有跟機器相關的特性及變數可能的值 在不同計算機中即使相同的數學運算式,亦可 能得到不同的結果
16
16 繫結時間 翻譯時的繫結 變數的位址 ( 若採靜態儲存區配置法 ) 變數真正的型態 ( 若採外顯式 —explicit 型態法 ) 。 執行時的繫結 變數的位址 ( 若採動態儲存區配置法 ) 變數真正的型態 ( 若採內隱式 —implicit 型態法 ) 變數真正的值
17
17 範例 假設 “y = x+100;” 為一個 C 語言的敘述 (statement) ,若 a. 以 “=” 為指定運算子 (assignment operator) b. 以 “+” 為加法符號 c.“+” 表示整數加法 d.“100” 表示十進位的一百 e. 整數 100 的內部表示法 (internal representation) f.100 為整數 g.x, y 的型態 (type) h.x, y 的值 i.x, y 的位址 (address) j.x, y 可以宣告的型態
18
18 精選習題 假設以下的敘述為一未提供 “ 捷徑計算 ” 能 力的程式段,請利用程式設計的技巧,使 此敘述經此改寫的動作後,具有與 “ 捷徑計 算 ” 之處理方法相同之處理模式 。 if and then E1 else E2
19
19 精選習題 試問在 C 語言中,最佳化編譯程式 (optimization compiler) 是否可以將二元布 林運算子 (boolean operator) 前後的兩項子敘 述 (sub-expression) 互相對調?其理由為何
20
20 精選習題 試說明何以動態儲存區配置允許程式中使 用遞迴呼叫 (recursive call) ,而靜態儲存區 配置則不允許?
21
21 精選習題 試定義何謂靜態型態繫結 (static type binding) 及動態型態繫結 (dynamic type binding)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.