- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1392
- 相冊
- 0
- 日誌
- 1
   
狀態︰
離線
|
在一個 block,即於 大括號內 定義的變數都是 區域變數,於 該區域變數的名稱是 唯一的。因此,在 main 或 任意一函數內 定義的變數 都是區域性的,其生命期 -- 即有記憶體配置與該變數 -- 為程式執行該 block 的開始 至該 block 結束,程式的執行 一離開含變數定義的 block 則該變數就不存在。
例 1. 一程式的大綱含變數的宣告如下:
1. void f(int i)
2. { int j;.....}
3. void main()
4. {int a;
5. .....
6. {int i;.....
7. }
8. f(a);
9. }
說明:
程式的執行由 main 開始 因此,執行時 第 4 行的區域變數 a 已經存在,但第 6 行的變數 i 則尚未成形, 函數 f 的引數 i 與變數 j 亦不存在。
程式執行 第 6 行 區域變數 i 才存在。程式執行至第 8 行,該變數 i 就消失了。
程式執行 第 8 行 呼叫函數 f 時,引數 i 及變數 j 方產生。函數 f 執行結束後,引數 i 及變數 j 均消失不存在,除非再呼叫函數 f,這些 引數及變數 才重新出現。
一個區域變數其使用範圍僅限於含變數定義的 block。因此,在該 block 各地都可引用 該變數名稱。
由於 block 可含 block 形成階層式的架構,因此可能產生內外 block 都定義同名稱的變數,此時,內部 block 的區域變數可蓋過外部 block 的區域變數,即在內部 block 所引用的變數名稱都是引用內部 block 的變數而非外部的 block 的變數。 由例 2 來說明此現象。
例 2.
1. main()
2. { int i,j;
3. i=10; j=5;
4. { int i;
5. i=j++;
6. printf("i=%d,j=%d\n",i,j);
7. }
8. printf("i=%d,j=%d\n",i,j);
9. }
說明:
main 含 2 個區域變數 i 及 j (以 i2, j2 表之,其中下標之 2 表示 變數定義於第 2 行),又於第 4 行至第 7 行的 block 含一區域變數 i4。
i2 的使用範圍為自第 2 行至第 9 行,扣除第 4 行至第 7 行,即自第 5 行 引用變數 i 是 i4而不是 i2。
j2 的使用範圍為自第 2 行至第 9 行。
i4 的使用範圍是自第 4 行至第 7 行。
程式執行完 第 5 行 i=j++; 後, i 的值為 5,即 i4 之值為 5,但 i2 的值仍為 10。
執行完該程式的結果為
i=5,j=6
i=10,j=6
|
|