next up previous contents
Next: 遞迴 Up: 函式 Previous: *可變參數   Contents   DYWANG_HOME

變數生命週期

  1. 變數種類
    1. 區域變數 (local variable):生命週期只限函式執行期間,退出函式後即不再有效。
    2. 全域變數 (global variable):宣告在函式外,每個函式都可使用此變數。
    3. 靜態變數 (static variable):類似區域變數,但靜態變數在編譯時配置固定的記憶體空間,所以即使退出函式,變數的值還是可以保留下來。

  2. 在這之前,函式的變數都是區域變數,都只在函式執行範圍內有效。
  3. 全域變數範例:修改變數對換程式 function2.c,將兩個變數設定成全域變數。
    [dywang@dyw219 zzz]$ vim function6.c
    [dywang@dyw219 zzz]$ cat function6.c
    #include <stdio.h>
    
    int x, y;
    
    void swap(void) {
    	int temp;
    
    	temp = x;
    	x = y;
    	y = temp;
    	return;
    }
     
    main() {
    	printf("Enter TWO integers: ");
    	scanf("%d %d", &x, &y);
    
    	printf("Before swap, x = %d, y = %d\n", x, y);
    	swap();
    	printf("After swap, x = %d, y = %d\n", x, y);
    }
    
  4. 編譯成功
    [dywang@dyw219 zzz]$ gcc -o function6 function6.c
    
  5. 執行結果:傳入不同個數的整數給函式 average ,都可計算其平均。
    [dywang@dyw219 zzz]$ ./function6
    Enter TWO integers: 12 56
    Before swap, x = 12, y = 56
    After swap, x = 56, y = 12
    
  6. 靜態變數範例:函式 increament 每呼叫一次,回傳值加 1。
    [dywang@dyw219 zzz]$ vim function7.c
    [dywang@dyw219 zzz]$ cat function7.c
    #include <stdio.h>
    
    int increament(void) {
    	static int i=0;
    
    	return i++;
    }
     
    main() {
    	printf("i = %d\n", increament());
    	printf("i = %d\n", increament());
    	printf("i = %d\n", increament());
    	printf("i = %d\n", increament());
    }
    
  7. 編譯成功
    [dywang@dyw219 zzz]$ gcc -o function7 function7.c
    
  8. 執行結果
    [dywang@dyw219 zzz]$ ./function7
    i = 0
    i = 1
    i = 2
    i = 3
    



2020-01-02