編程全局變數
1. 局部變數,全局變數
在編程中,理解變數的作用域是非常關鍵的。主要分為局部變數和全局變數兩種。
局部變數,也被稱為內部變數,是在函數內定義的。它們的作用域僅限於函數內部,離開該函數就不能再使用這些變數。局部變數的使用范圍明確,易於管理和避免沖突。例如,形參和實參的變數名相同,不會產生混淆。同時,即使在主函數中定義變數,也只能在主函數內使用,且主函數也不能訪問其它函數中定義的變數,這與其它編程語言有所不同。
全局變數,則被稱為外部變數,是在函數外部定義的變數。它不屬於任何特定函數,而是屬於整個程序文件,作用域覆蓋整個源程序。在函數中使用全局變數時,通常需要進行全局變數說明。全局變數的說明符是extern,但在程序文件的開頭定義的全局變數,在該文件的任何函數內使用時,可以不再重復聲明。
在C語言中,變數存儲類別也是劃分變數生命周期的重要方式。存儲類別包括靜態存儲方式和動態存儲方式。
靜態存儲方式意味著變數在程序運行期間分配固定存儲空間,整個程序執行期間這些變數的存儲單元保持不變。而動態存儲方式則是在程序運行時根據需要分配和釋放存儲空間。全局變數存儲在靜態存儲區,從程序開始執行時分配空間,程序結束時釋放。動態存儲區則用於函數形式參數、自動變數(未加static聲明的局部變數)以及函數調用時的現場保護和返回地址。
自動變數是函數中的局部變數,若未特別聲明為static存儲類別,則它們是動態分配存儲空間的。函數調用結束後,自動釋放這些存儲單元。靜態局部變數則屬於靜態存儲類別,在程序整個運行期間不釋放。未初始化的靜態局部變數編譯時自動賦初值,而自動變數不初始化時,其值是不確定的。
為了提高程序執行效率,C語言允許將局部變數的值存儲在CPU寄存器中,這類變數稱為寄存器變數。但要注意的是,寄存器變數只能是局部自動變數或形式參數,且寄存器數目有限,不能定義任意多個。靜態變數不能定義為寄存器變數。
外部變數,即全局變數,其作用域從定義處開始,直到整個程序文件結束。在文件的開頭定義外部變數後,在文件的任何位置引用該變數都是合法的。如果需要在函數之前引用外部變數,則應使用關鍵字extern進行聲明,表示該變數已經在定義處被聲明。
以上內容總結了局部變數和全局變數,以及變數存儲方式的基本概念,幫助理解變數作用域和生命周期。