SOGO論壇
  登入   註冊   找回密碼
查看: 532|回覆: 0
列印 上一主題 下一主題

[技術文章] 區域變數 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-21 10:18:55 |只看該作者 |倒序瀏覽
在一個 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

喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-4-28 19:16

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部