變量從變量值存在的空間角度(作用域)可以分為局部變量和全局變量,從時間角度(存儲器)可以分為靜態(tài)存儲和動態(tài)存儲。
局部變量
- 聲明在函數(shù)內(nèi)。
- 只有在函數(shù)運行時才會存在。
全局變量
- 聲明在函數(shù)外。
- 任何函數(shù)都可以在任意時刻訪問。
自動變量
- 自動變量是動態(tài)存儲方式。
- 一般以數(shù)據(jù)類型加上變量名的方式定義變量得到的是自動變量(默認(rèn) auto 關(guān)鍵字)。
- 自動變量的生命周期是由函數(shù)的生命周期所決定,即函數(shù)執(zhí)行完畢自動變量便銷毀。
- 自動變量包括函數(shù)形參和非static局部變量。
- 動態(tài)分配存儲空間,存儲在動態(tài)存儲區(qū)中。
- 只在定義它們的時候才創(chuàng)建,在定義它們的函數(shù)返回時系統(tǒng)回收變量所占存儲空間。對這些變量存儲空間的分配和回收是由系統(tǒng)自動完成的。
靜態(tài)變量(static 變量)
- 靜態(tài)變量是靜態(tài)存儲方式。
- 定義變量時,在數(shù)據(jù)類型之前加上 static 得到的便是靜態(tài)變量。
- 靜態(tài)變量的生命周期是由整個程序所決定,即程序執(zhí)行完畢時靜態(tài)變量才銷毀。因為靜態(tài)變量儲存在靜態(tài)數(shù)據(jù)區(qū),而函數(shù)是儲存在棧中,函數(shù)執(zhí)行完畢后棧銷毀,不會影響到靜態(tài)變量的值。
總結(jié)
1.定義局部變量時沒有static,是自動變量;
2.定義局部變量時加static,是靜態(tài)變量。局部靜態(tài)變量的初始化語句在第一次進(jìn)入該block時執(zhí)行一次,以后再進(jìn)入不再執(zhí)行該初始化語句;
3.全局變量是靜態(tài)變量(無論有沒有加static);
4.定義全局變量時加static,是限制它不會被別的文件引用;
5.定義局部自動變量時,若沒有初始化,則它的初始值是不確定的;定義靜態(tài)變量(全局變量、局部靜態(tài)變量)沒有初始化,則其初始值為0.