SOGO論壇

標題: 全域變數 [列印本頁]

作者: mm117777    時間: 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


作者: 劍君13恨    時間: 2012-8-17 20:37:45

恩  謝謝分享
最近開使初學程式  很有幫助!




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM