變量的生存期和作用域


  變量的生存期和作用域是個很基礎但又很重要的問題,所以我打算寫幾百字重溫一下。

變量的生存期是指變量在什么時間段存在。

變量的作用域是指變量在哪些代碼塊中能夠被訪問。

一般來說變量生存期包含作用域。即在變量起作用的代碼段,這時變量已經分配了存儲空間。

也就是說,變量可能已經分配存儲空間,但它不能被訪問。

在程序加載到內存中時,有些變量就已經分配存儲空間,並且這個存儲空間直到整個程序執行完畢,從內存中退出時才會被釋放。

這些變量的生存周期就為整個程序的生存周期。如 全局變量和靜態局部變量。它們的差別是全部變量的作用域一般為定義處到它所在文件結束。

要在全局變量定義位置之前或其他源文件中引用該全局變量,需要用extern來擴展該全局變量的作用域。

程序中有的變量在程序加載到內存中時並不分配存儲空間,而是到定義它的函數被調用執行時才會臨時分配存儲空間,並且一旦該函數執行完畢返回到被調用處,這些變量的存儲空間會被回收。

如 非靜態局部或自動變量。

一個局部變量,如果沒有用static修飾則自動為auto,即這種情況下生存期為函數調用到函數返回這個時間段。

對於非靜態局部變量,生存期和作用域都為其所在定義的函數

對於靜態局部變量,它的生存期是整個程序生命周期,但作用域依舊為定義它的函數內部

全局變量與靜態局部變量如果未初始化,值為0

非靜態局部變量未初始化,值不定。

1. 一般情況下全局變量定義函數外,局部變量定義函數內;全局變量作用范圍是全局,局部變量作用范圍在函數內;

2. 靜態變量定義在函數外,則為靜態全局變量,作用范圍為當前文件;定義在函數內,則為局部靜態變量,作用范圍同局部變量;

3. 如果在全局范圍要經常用到某個值,則設置為靜態變量,否則定義為普通全局變量即可;

4. c、c++和java可以定義靜態變量,go和python不能定義靜態變量;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM