發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0038
發信站: ☆清華電機☆ (Sat Jul  8 01:14:56 1995)
轉信站: star

星星流講座 0038         C 語言教室

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

自動變數隨著程式區塊的結束而自動消滅,如果我們要它活著那該怎麼
辦呢?這時候你必須在宣告變數時在變數的型態前面加一個 static 修
飾子 (modifier) 使它成為靜態變數,例如:

        static int si;

區塊內靜態變數的值會一直保留著,不論它所存在的程式區塊是否結束,
這種靜態變數叫做內部靜態變數 (Internal static variable)。內部靜
態變數和全域變數一樣,compiler 通常會把它們的初始值設定為 0 以確
保程式的正確性。

變數的第三種型態稱為暫存器變數 (register variable),暫存器變數的
宣告方式是宣告時在變數的型態前面加一個 register 修飾子,例如:

        register int ri;

暫存器變數的意義是指示 compiler 儘可能地把這個變數利用 CPU 的暫
存器來存放,以加速存取這個變數的速度 (通常可以增加八到十倍左右的
速度)。什麼時候我們會用到暫存器變數呢?例如 for 迴圈的計數器、程
式中非常常用的變數等等。暫存器變數不一定會被放在 CPU 的暫存器
中,因為如果沒有足夠的暫存器可供存放,它會被放在一般的記憶體之中。
不論它是否被放置於暫存器內,你都無法用 & 取得它的位址。


暫存器變數可能受到硬體的限制,它所能表示的資料型態和值域會隨著機
器種類的不同而改變。

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