靜態(tài)變量,全局變量(外部變量),局部變量一些對(duì)比

本文整理于多個(gè)博客如https://blog.csdn.net/weixin_43222324/article/details/106989714

首先,對(duì)比這些變量的不同,最重要的是兩個(gè)方面,一個(gè)是作用域一個(gè)是生命周期。


靜態(tài)變量和動(dòng)態(tài)變量對(duì)比

靜態(tài)變量和動(dòng)態(tài)變量(自動(dòng)變量)---是從變量的內(nèi)存分配的角度(生命周期)劃分。

  • 靜態(tài)變量:
    1. 存在靜態(tài)存儲(chǔ)區(qū),分配一次空間,在程序的整個(gè)運(yùn)行期間內(nèi)都不釋放空間。
    2. 編譯時(shí)賦初始值,只賦一次初值,在以后每次調(diào)用函數(shù)時(shí),都不再重新為其賦值,只是使用上一次函數(shù)被調(diào)用結(jié)束時(shí)變量的值。
    3. 未賦初值的話,編譯器給賦值為0.
  • 動(dòng)態(tài)變量(自動(dòng)變量):
    1. 存在動(dòng)態(tài)存儲(chǔ)區(qū)(棧)上,即局部變量,函數(shù)調(diào)用結(jié)束后存儲(chǔ)單元即被釋放。
    2. 而自動(dòng)局部變量的初值不是在編譯時(shí)賦予的,而是在函數(shù)調(diào)用時(shí)賦予的,每調(diào)用一次,函數(shù)都對(duì)變量重新賦一次初值。
    3. 如果不賦值,則變量的值是一個(gè)不確定的值。

全局變量和局部變量對(duì)比

全局變量和局部變量---是從變量的作用域的角度劃分。

  • 全局變量(外部變量):

    1. 作用域?yàn)檎麄€(gè)工程
    2. 存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)(這點(diǎn)與靜態(tài)變量相同)
    3. 此處引入外部變量(extern關(guān)鍵字):extern主要針對(duì)具有多個(gè)源文件的項(xiàng)目。如果有多個(gè)源文件需要使用到相同的全局變量,則這些變量只需要在其中的某一個(gè)源文件中定義一次,其它的源文件如果想使用這些外部變量,需要在聲明的時(shí)候前面加上"extern"。
  • 局部變量:

    1. 作用域?yàn)楫?dāng)前程序塊
    2. 存儲(chǔ)在棧區(qū)(非靜態(tài)局部變量就是自動(dòng)變量)

優(yōu)先使用局部變量再使用全局變量:局部變量可以與全局變量重名,但是局部變量會(huì)屏蔽全局變量。


靜態(tài)局部變量和靜態(tài)全局變量

  • 靜態(tài)全局變量
    把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。并不是說全局變量在定義時(shí)加了static關(guān)鍵字才是靜態(tài)存儲(chǔ),不加static就是動(dòng)態(tài)存儲(chǔ),不是的。不管加不加static,全局變量都是存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)的,都是在編譯時(shí)分配存儲(chǔ)空間的,兩者只是作用域不同,全局變量默認(rèn)具有外部鏈接性,作用域是整個(gè)工程,全局靜態(tài)變量的作用域僅限本文件,不能在其他文件中引用。

  • 靜態(tài)局部變量
    把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。但是作用域還是在原來的函數(shù)體內(nèi)可以使用

總結(jié):把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。


最后總結(jié)一個(gè)表格


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容