區域性變數的作用域和生存週期

2021-08-15 14:57:03 字數 994 閱讀 4241

(1)在函式開頭定義

(2)在函式的內部定義

(3)在復合語句塊內部定義

定義在函式內部的變數只能在函式內部引用,同樣定義在復合語句塊中的變數只是在復合語句塊內有效。將這種變數稱為「區域性變數」,顧名思義,這些變數的作用域僅僅是在函式內部或復合語句塊內。

//復合語句塊的區域性變數舉例
# include

int main()

s += i;

printf("%d\n",s);

}

這樣的**在編譯的時候就會報錯,因為我們在復合語句塊內定義乙個 整型 i = 1,其作用域是復合語句塊內,若我們想在復合語句塊外用引用該變數是不可行的。變數i只在復合語句塊內有效,離開該復合語句塊變數就失效,系統會把它占用的記憶體釋放掉。

//[error] 'i' was not declared in

this scope

這是乙個錯誤提示資訊,編譯器說 i 這個變數沒有宣告。

//定義在函式內部的區域性變數
# include

int func(int n)

int main()

現在我們定義了乙個 返回值為整型func(int n)函式,其功能是我傳入乙個整型數,其返回值是原值。但在主函式中,我想輸出定義在func()函式內部區域性變數i的值。同樣是不可行的,編譯器在編譯的的時候就會報錯。但是在不同的函式中可以定義同名的變數,因為他們代表不同的物件,互不干擾。

//[error] 'i' was not declared in

this scope

//錯誤提示同我們在復合語句塊中引用區域性變數是相同的。
上述例子雖然簡單,但是也直白直觀的感受到區域性變數的作用域和生命週期。我們在實際寫**的過程中,一定要注意區域性變數的引用。

區域性變數的作用域

問題 這裡的tp fp score在不同的函式內部使用了同樣的變數命名是否允許?def metrics precision x1,x2 tp np.sum x1 1 x2 1 fp np.sum x1 0 x2 1 score tp tp fp return score def metrics re...

靜態變數,靜態區域性變數的生存週期

首先要理解生存週期與作用域的區別 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用...

靜態變數,靜態區域性變數的生存週期

首先要理解生存週期與作用域的區別 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用...