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

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

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

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

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-21 10:19:23 |只看該作者 |倒序瀏覽
在函數之外 宣告或定義 的變數都是 全域變數。全域變數 於程式編譯 之後就 存在一直到 程式的結束才消失,其使用範圍 為 自檔案的宣告或定義處 開始 至檔案的 結束,其名稱於 一個檔案 也必須是 唯一的。

全域變數的使用,其好處是 減少函數呼叫的 引數個數,其壞處是程式 較不易維修、除錯。

註:函數的呼叫其 side-effect (副作用)愈少愈好,即函數的呼叫 會改變 函數外 變數的值。將於例 3 說明。

如果 區域變數 與 全域變數 同名,則 全域變數 的使用範圍就不包含區域變數 的 使用範圍。

於例 3 將說明 全域變數 的上述性質。

例 3. 全域變數的使用範圍。

1.   int s=0;
2.   int square(int i)  
3.   { s=i+1; printf("s=%d,i=%d\n",s,i);
4.     return i*i;
5.   }
6.   int t=1;
7.   main()
8.   { int s=10;
9.     t=square(s);
10.    printf("s=%d,t=%d\n",s,t);
11.  }

說明:


例 3 含 2 個全域變數 s1及 t6, s1的使用範圍為整個檔案扣去第 7 行至第 11 行,因 main() 有區域變數 s8。
於第 9 行,呼叫函數 square,傳 10 出去,傳 100 回來給變數 t。
呼叫函數 square 的過程中,有一 side-effect(副作用) 即改變了全域變數 s1 的值,因此, square 的語意並不僅含將引數 i 平方而已, 此函數已不能形成一 獨立的模組, 因此, 維修變得 較難, 同時 程式也 較不易 讓人看懂。
程式執行的結果為
  s=11,i=10
  s=10,t=100

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

Rank: 12Rank: 12Rank: 12

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

狀態︰ 離線
2
發表於 2012-8-17 20:37:45 |只看該作者
恩  謝謝分享
最近開使初學程式  很有幫助!
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


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

GMT+8, 2024-5-25 19:50

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