1. 程式人生 > >儲存型別與作用域

儲存型別與作用域

一個變數,不僅有資料型別,還有儲存型別


資料型別包括整形、長整形、單精度浮點型、雙精度浮點型、各種字元型、指標型、結構型和自定義型別等。


儲存型別:分為靜態儲存動態儲存兩大類。

動態儲存:包括自動變數(auto)暫存器變數(register)

靜態儲存:包括靜態變數(static)外部變數(extern)


1st 靜態變數

定義格式:

static 資料型別 變數名列表;


特點:

1、分配記憶體的時間:在變數定義時就進行儲存單元的分配。

(靜態變數在編譯時,完成對定義時的被賦初始值這一操作。也就是說,二次呼叫函式式時,不會再次定義也不會再次賦予該變數初始值。)

2、釋放記憶體時間:從分配開始,一直保持到整個程式結束後才釋放儲存單元。

(函式呼叫結束時若程式尚未終止,也不釋放。)

3、作用域:只在該函式內。

   如果將靜態變數定義成全域性變數,那麼作用是一定是該檔案。其他檔案絕對不能使用該變數。

4、如果定義時沒有賦初值,則給一個預設值零。

(int 是0;char 是'\0';float是0.0)


使用建議:

佔用的記憶體不能及時釋放,所以儘量少用。


2nd 外部變數(亦稱全域性變數)

格式定義:

資料型別 變數名列表;

宣告格式:

extern 資料型別 變數名列表;


特點:

1、能被其他檔案呼叫;

2、在函式外定義,在檔案開頭定義就不需要在使用前宣告,如果在函式與函式之間定義,則需要在main()中宣告。

3、其他檔案使用時,也要在檔案頭宣告。


3rd內部函式&外部函式

內部函式

定義:只能被本檔案呼叫的函式;

定義格式:static 型別識別符號 函式名(形參表)

例如, static int kakaka(int a)
用處:在多人合作編寫程式時,不同檔案之間可以避免形成意料意外的干擾。例如,兩個檔案中使用了相同名稱的不同函式也沒有問題。

外部函式

定義:能被其他檔案呼叫的函式

定義格式:

extern 型別識別符號 函式名(形參表)

或者

型別識別符號 函式名(形參表)

宣告格式:

extern 型別識別符號 函式名(形參表)

可見,一般沒有字首的函式都是外部函式。

外部函式在其他原始檔中只有宣告(宣告不一定要在檔案頭,在函式內部也可以)就可以使用。