第5周:程序結(jié)構(gòu)——5.1 全局變量

1.全局變量

定義在函數(shù)內(nèi)部的變量為本地變量;定義在函數(shù)外面的變量是全局變量。

本地變量的生存期和作用域一致,都在函數(shù)內(nèi)部;全局變量具有全局的生存期和作用域。它們與任何函數(shù)都無關(guān),在任何函數(shù)內(nèi)部都可以使用它們。

全局變量的初始化

沒有做初始化的全局變量編譯器會(huì)自動(dòng)給它補(bǔ)上 0 值。指針會(huì)得到 NULL 值本地變量一定要初始化??!!

只能用編譯時(shí)刻已知的值來初始化全局變量。全局變量的值不應(yīng)該和另一個(gè)全局變量聯(lián)系在一塊。

它們的初始化發(fā)生在 main 函數(shù)之前

被隱藏的全局變量

如果函數(shù)內(nèi)部存在與全局變量同名的變量,則全局變量被隱藏。

在更小的地方,可以重新定義更大地方曾經(jīng)出現(xiàn)過的變量,把它隱藏。


2.靜態(tài)本地變量

在本地變量定義時(shí)加上 static 修飾符就成為靜態(tài)本地變量當(dāng)函數(shù)離開的時(shí)候,靜態(tài)本地變量會(huì)繼續(xù)存在并保持其值

靜態(tài)本地變量的初始化只會(huì)在第一次進(jìn)入這個(gè)函數(shù)時(shí)做。以后進(jìn)入函數(shù)時(shí)會(huì)保持上次離開時(shí)的值。不會(huì)被重新初始化。

靜態(tài)本地變量實(shí)際上是特殊的全局變量。它們位于相同的內(nèi)存區(qū)域(與全局變量緊挨)。

靜態(tài)本地變量具有全局的生存期,函數(shù)內(nèi)部的局部作用域。static 在這里的意思是局部作用域(僅本地可訪問)。


3. TIPS

返回指針的函數(shù)

返回本地變量的地址是危險(xiǎn)的,一旦離開函數(shù),本地變量不存在(不受控),地址分配給別人使用。

返回全局變量或靜態(tài)本地變量的地址是安全的(地址與函數(shù)無關(guān))。

返回在函數(shù)內(nèi) malloc 的內(nèi)存是安全的,但是容易造成問題。

最好的做法是返回傳入的指針。

不要使用全局變量在函數(shù)間傳遞參數(shù)和結(jié)果。

盡量避免使用全局變量(使用全局變量和靜態(tài)本地變量的函數(shù)是線程不安全的)。

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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