一、本地變量
定義:函數的每次運行,就產生了一個獨立的變量空間,在這個空間中的變量,是函數的這次運行所獨有的,稱作本地變量;
- 定義在函數內部的變量就是本地變量;
- 參數也是本地變量。
1、變量的生存期和作用域
- 生存期:從變量出現開始,到它消亡;(實際爲佔據和釋放內存);
- 作用域:在(代碼內)什麼範圍內可以訪問這個變量;
- 本地變量的生存期和作用域都在塊內;
注:{ }所包含的代碼區域,就稱爲塊
但是if( )語句括號裏的i,在它後面的{ }裏依然有效,可以把()裏的看作整體的一個子塊。
2、本地變量的規則
(1)本地變量就是定義在塊內的;
(2)它可以定義在函數的塊內;
(3)也可以定義在語句的塊內;
(4)甚至可以隨便拉一對大括號來定義;
(5)程序運行進入這個塊之前,其中的變量不存在,離開這個塊,其中的變量就消失了;
(6)塊外面定義的變量在裏面仍有效;
(7)塊裏面定義了和外面同名的變量回掩蓋外面的;
(8)不能再一個塊內定義同名的變量;
(9)本地變量不會被默認初始化;
(10)參數在進入函數之前時就被初始化了;
二、全局變量
定義:定義在函數外面的變量就是全局變量;
1、生存期和作用域
- 他們與任何函數都無關;
- 在任何函數內部都可以使用他們;
2、全局變量初始化
- 沒有做初始化的全局變量會得到0值;(指針會得到NULL值)
- 只能用編譯時刻已知的值來初始化全局變量;
- 它們初始化發生在main()函數之前;
- 注意:如果函數內部存在與全局變量同名的變量,則全局變量被隱;
三、靜態本地變量
定義:在本地變量定義時加上static修飾符就成了靜態本地變量;
特性:
- 當函數離開時,靜態本地變量會繼續保持其值;
- 靜態本地變量的初始化只會在第一次進入這個函數時做,以後進入函數時會保持上次離開的值;
- 靜態本地變量具有全局的生存期,以及函數內部的局部作用域;
注意事項:
- 靜態本地變量實際就是特殊的全局變量;
- 它們位於相同的內存區域;