溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言中怎么使用static關(guān)鍵字

發(fā)布時(shí)間:2021-07-02 16:26:31 來(lái)源:億速云 閱讀:302 作者:Leah 欄目:互聯(lián)網(wǎng)科技

C語(yǔ)言中怎么使用static關(guān)鍵字,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

C語(yǔ)言的關(guān)鍵字static在有三個(gè)作用:聲明靜態(tài)函數(shù),聲明靜態(tài)全局變量,聲明靜態(tài)局部變量

聲明靜態(tài)函數(shù)

    在函數(shù)的返回類型前加個(gè)static,就是靜態(tài)函數(shù)了。靜態(tài)函數(shù)只能在聲明它的文件中使用,其他文件看不到它。而不同的文件可以使用相同名字的靜態(tài)函數(shù),互不影響。非靜態(tài)函數(shù)可以在另一個(gè)文件中直接引用,甚至不必使用extern聲明

C語(yǔ)言中怎么使用static關(guān)鍵字


聲明靜態(tài)全局變量
    全局變量定義在函數(shù)體外部,編譯器會(huì)自動(dòng)對(duì)其初始化。普通全局變量,對(duì)整個(gè)Kernel可見(jiàn);而靜態(tài)全局變量?jī)H對(duì)當(dāng)前文件可見(jiàn),其他文件不可訪問(wèn)。因此,如果定義的全局變量(或函數(shù))不需要與其他文件共享,建議加上static來(lái)降低程序之間的耦合。

聲明靜態(tài)局部變量
    局部變量就是函數(shù)內(nèi)部定義的變量,其作用域比全局變量小很多。編譯器一般不對(duì)普通局部變量進(jìn)行初始化,也就是說(shuō)它的值在初始時(shí)是不確定的,除非對(duì)其顯式賦值。而使用了static的靜態(tài)局部變量,即使在聲明時(shí)未賦初值,編譯器也會(huì)把它初始化為0。而且靜態(tài)局部變量的存儲(chǔ)位置也不同,即使函數(shù)返回了,它的值也會(huì)保持不變

C語(yǔ)言中怎么使用static關(guān)鍵字

再把它們的地址與系統(tǒng)內(nèi)存布局對(duì)比一下


得出以下結(jié)論:

  • 1 靜態(tài)函數(shù)在Shell里不可見(jiàn),全局函數(shù)在Shell里可見(jiàn)

  • 2 不管哪種函數(shù),都存儲(chǔ)于系統(tǒng)的文本段中

  • 3 有初值的全局變量(無(wú)論是否靜態(tài)變量),以及有初值的靜態(tài)局部變量,存儲(chǔ)于系統(tǒng)的數(shù)據(jù)段中

  • 4 無(wú)初值的全局變量(無(wú)論是否靜態(tài)變量),以及無(wú)初值的靜態(tài)局部變量,存儲(chǔ)于系統(tǒng)的BSS段中,被初始化為0

  • 5 局部變量(非靜態(tài),無(wú)論有無(wú)初值),存儲(chǔ)于任務(wù)的棧中。如未賦初值,則使用0xeeeeeeee

看完上述內(nèi)容,你們掌握C語(yǔ)言中怎么使用static關(guān)鍵字的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI