## 【我解C語言面試題系列】002 局部變量和全局變量小結?
**局部變量和全局變量小結**
**局部變量**
局部變量也稱為內部變量。局部變量是在函數內作定義說明的。**其作用域僅限于函數內部**,離開該函數后再使用這種變量是非法的。
局部變量從存儲方式上可分為動態(auto)存儲類型和靜態(static)存儲類型。
動態存儲類型的局部變量都是動態的分配存儲空間,數據存儲在動態存儲區(棧)中。函數調用結束后自動釋放,生存期是在聲明該變量的函數執行過程。
靜態存儲類型的局部變量則是靜態的分配存儲空間,數據存儲在靜態存儲區中。在程序整個運行期間都不釋放,生存期貫穿于程序運行的整個過程。
函數中的局部變量,如不專門聲明為static存儲類別,默認都是動態地分配存儲空間的,我們在平時的聲明變量的過程中auto都是默認省略的。
**全局變量**
全局變量也稱為外部變量,是在函數的外部定義的,它的**作用域為從變量定義處開始,到本程序文件的末尾**。全局變量全部存放在靜態存儲區,在程序開始執行時給全局變量分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放;
如果外部變量不在文件的開頭定義,**其有效作用域只限于定義處到文件終**。
如果在定義點之前的函數想引用該外部變量,則應該在引用之前用關鍵字extern對該變量作“外部變量聲明”。表示該變量是一個已經定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。**其有效作用域就被拓展到從這個文件**extern**聲明處到文件結束**。
如果在全局變量聲明的時候,前面加上關鍵字static,那么其他文件就不能再訪問和使用該變量,**其有效作用域只限于定義處到文件終**。
**局部變量能否和全局變量重名**
局部變量能和全局變量重名,但是局部變量會屏蔽全局變量。在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。
PS:**這對**extern**聲明的全局變量也一樣**。