發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0037
發信站: ☆清華電機☆ (Fri Jul  7 14:43:19 1995)
轉信站: star

星星流講座 0037         C 語言教室

第 6 講 之 1            函數
                        Topic: Variables (1)

在進一步地討論函數之前,我們先來看看變數的分類法。

我們前面提到變數依定義範圍的不同,可以分為區域變數 (local variable)、
全域變數 (global variable) 以及外部變數 (external variable),這是變數
的第一種分類方法。

第二種分類方法就是依變數的「行為」(behavior) 來分類:靜態變數 (static
variable)、自動變數 (automatic variable) 以及暫存器變數 (register
variable)。我們現在就來研究這種分類的方法。

自動變數顧名思義就是自動產生與消滅的變數,什麼變數是自動產生與消滅的變
數呢?函數內的區域變數就是一種。函數內的區域變數在進入函數時自動地產生
,離開函數時自動地消滅,這就是標準的自動變數。

事實上,自動變數的定義是在程式區塊 (block) 內宣告的非靜態變數,當進入
區塊時該變數自動產生,離開區塊時該變數自動消滅。區塊和函數有什麼不同?
請看看下面的程式:

/* auto.c */
#include <stdio.h>

void main (void)
{                                               /* block 1 */
    int i = 3;
    int j = 0;
    printf ("%d\n", i);
    {                                           /* block 2 */
        int j = 4;
        printf ("%d %d\n", i, j);
    }
    printf ("%d %d\n", i, j);
}

執行結果:

3
3 4
3 0

我們前面定義過,用大括號 {} 括起來的程式碼就叫程式區塊。我們在區塊 2
中另外定義了一個整數 j,j 就是區塊 2 中的自動變數,它只活在定義它的區
塊之中,甚至於不屬於含括它的 main 函數,這與區域變數的定義不太一樣。

--
本文原作者為徐振家,原作刊載於星星神教總壇 ☆清華電機☆ test 板。
你可以以電子文件的形式將本文自由流傳於台灣學術網路,但必須包含此版權聲明。
原作者依中華民國著作權法之規定,享有本文之著作權,請勿抄襲以免觸法。
未經授權任何人不得以任何形式對本文做任何修改及商業上之應用。
其他網路的轉載或其他用途的應用,請先知會作者,並取得其同意。
對本文有任何疑問或意見請 mail 給 ax.bbs@bbs.ee.nthu.edu.tw,謝謝。