歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年5月12日 星期一

Variable In C

先看一段程式簡碼,再來談變數...
#include
#include
#include

int gi_variableA;

void test1();
void test2();
void test3();
void main()
{
int li_variableB;
extern int ei_variableD;

li_variableB = ei_variableD;
.....
}

void test1()
{
static int si_variableC;
.....
}

int ei_variableD;

void test2()
{
register int ri_variableE;
.....
}

void test3()
{
int *pi_variableF;

pi_variableF = malloc(100);
.....
free(pi_variableF);

}
今天的主角有六個分別是:
gi_variableA/li_variableB/si_variableC/ei_variableD/ri_variableE/pi_variableF
我的變數命名規則:
第一碼:變數種類
第二碼:Data Type
第三碼:底線
第四碼含以後:變數目的

變數種類介紹:
Global Variable(gi_variableA):程式檔案範圍的變數是一種全域變數,檔案中所有的函數都可以去使用它.[main() test1() test2() test3()都可以引用]

Local Variables(li_variableB):程式區塊範圍的變數是一種區域變數,變數只能在宣告的函數中使用,在函數外的程式碼並無法存取此變數.[main()才可以引用]

Static Variable(si_variableC):是一種在函數或程式檔案宣告的永久變數,在其它函數或程式檔案並無法存取這些靜態變數.在函數的程式區塊宣告的靜態變數,不同於其它區域變數,在離開函數時會消失,編譯程式會替靜態變數配置固定的記憶體位置,在重複呼叫函數時,靜態變數值都會保留下來.在宣告變數前加上static 關鍵字,就可以宣告靜態變數.[test1()才可以引用,但是其值會被保留下來]

External Variable(ei_variableD):C語言全域變數也稱為「外部變數」,外部變數都會配置固定的記憶體位置,如果沒有指定初值,預設值為0.[ei_variableD宣告在test1()之下,所以雖然號稱全域變數,但是只有test2() test3()可以直接引用,main()或test1()要引用時,在函數內宣告extern int ei_variableD才可以開始引用,如main()所示]

Register Variable(ri_variableE):「暫存器變數」,是針對程式中存取十分頻繁的變數,可以直接將變數置於CPU的暫存器,以便加速程式的執行,通常是使用在迴圈的計數器變數.在宣告變數前加上register關鍵字,就可以宣告暫存器變數.[test2()才可以引用]
對「暫存器變數」的一些限制規定:
a.暫存器變數只可以使用在區域變數或函數的參數.
b.暫存器變數並不能使用「&」取址運算子取得變數的位址(因為其位址不在記憶體內).
c.暫存器變數允許使用的個數需視CPU的電腦硬體而定,而且只有少數變數可以宣告成暫存器變數.
d.Compiler對於暫存器變數並不一定處理(如果暫存器不足的話),不過就算將變數宣告成register也無所謂,Compiler會自行決定是否處理.

Pointer Variable或Dynamic Variable(pi_variableF):「指標變數」或稱「指標變數」,變數內儲存的是某變數所在記憶體的位置,C語言之所以強大的功能之一.因為宣告後,可以對其做動態記憶體配置(malloc),視情況而去配置,不用時可以去釋放掉(free),所以稱為動態變數.[test3()才可以引用]

0 個回應:

MSN狀態(我在線上時,可以跟我交談喔)