儲存型別與作用域
一個變數,不僅有資料型別,還有儲存型別。
資料型別包括整形、長整形、單精度浮點型、雙精度浮點型、各種字元型、指標型、結構型和自定義型別等。
儲存型別:分為靜態儲存和動態儲存兩大類。
動態儲存:包括自動變數(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 型別識別符號 函式名(形參表);
可見,一般沒有字首的函式都是外部函式。
外部函式在其他原始檔中只有宣告(宣告不一定要在檔案頭,在函式內部也可以)就可以使用。