变量的属性(全局变量、局部变量、动态变量、静态变量等)
?
變量的屬性?
1、變量的分類
l?????????根據(jù)作用域:可分為全局變量和局部變量。
l?????????? 根據(jù)生存周期:可分為靜態(tài)存儲方式和動態(tài)存儲方式,具體地又分為自動的(auto)、靜態(tài)的(static)、寄存器的(register)、外部的(extern)。
靜態(tài)存儲方式是指在程序運(yùn)行期間分配固定的存儲空間的方式,動態(tài)存儲方式是在程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式。
?
2、變量的作用域和存儲類別的關(guān)系
每一個(gè)變量均有作用域和存儲類別兩個(gè)屬性,這些屬性共同用于描述一個(gè)變量,這些不同類型的變量與存儲位置的關(guān)系如下:
l????????? 外部變量(全局變量)、靜態(tài)外部變量、靜態(tài)局部變量存儲在靜態(tài)存儲區(qū)。
l????????? 自動局部變量(局部變量默認(rèn)為自動局部變量)、函數(shù)形參存儲在動態(tài)存儲區(qū)(即棧區(qū))。
l????????? 不論是靜態(tài)存儲區(qū)還是動態(tài)存儲區(qū)均屬于內(nèi)存中的用戶區(qū)。
l????????? 而寄存器變量是存儲在CPU寄存器中的而不是內(nèi)存中。
?
3、與作用域相關(guān)的幾個(gè)屬性:
l????????? 局部變量:在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在本函數(shù)范圍內(nèi)有效,也就是說只有在本函數(shù)內(nèi)才能使用它們,在此函數(shù)以外是不能使用這些變量的,這種類型的變量就稱為“局部變量”。
l????????? 全局變量:在函數(shù)外定義的變量,可以為本源文件中其它函數(shù)所公用,有效范圍為從定義變量的位置開始到本源文件結(jié)束,這種類型的變量就稱為“全局變量”。
?
4、與存儲類型相關(guān)的幾個(gè)屬性:
l????????? atuo:在聲明局部變量時(shí),若不指定 static,默認(rèn)均是 auto,這類變量都是動態(tài)分配存儲空間的,數(shù)據(jù)存儲在動態(tài)存儲區(qū)中。
l???????? static:在聲明局部變量時(shí),使用關(guān)鍵字 static 將局部變量指定為“靜態(tài)局部變量”,這樣在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即占用的存儲單元不釋放,在下一次函數(shù)調(diào)用時(shí),該變量已有值就是上次函數(shù)調(diào)用結(jié)束時(shí)的值。
l????????? register:在聲明動態(tài)局部變量或者函數(shù)形參時(shí),可將變量聲明為register,這樣編譯系統(tǒng)就會為變量分配一個(gè)寄存器而不是內(nèi)存空間,通過這種方式可提升對某些局部變量頻繁調(diào)用的程序的性能。(寄存器運(yùn)算速度遠(yuǎn)高于內(nèi)存)
l????????? extern:用于擴(kuò)展全局變量的作用域。
1)???????? 比如如果函數(shù)想引用一個(gè)外部變量,但該外部變量在該函數(shù)后定義,那么這個(gè)函數(shù)需要使用 extern 來聲明變量,這樣才能使用在該函數(shù)后面定義的全局變量。
2)???????? 此外,extern 還可以在多文件的程序中聲明外部變量。
總結(jié)
以上是生活随笔為你收集整理的变量的属性(全局变量、局部变量、动态变量、静态变量等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET 3.5 企业级开发
- 下一篇: Memcached深度分析