Static局部變量與全局變量的區(qū)別是什么

這篇文章給大家介紹Static局部變量與全局變量的區(qū)別是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管維護(hù)等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)。

Static局部變量與全局變量的區(qū)別?編譯后映射文件是否包含此類(lèi)變量的地址?全局變量(外部變量)的說(shuō)明之前再冠以static 就構(gòu)成了靜 態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整 個(gè)源程序, 當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的 全局變量在各個(gè)源文件中都是有效的。

      而靜態(tài)全局變量則 限制了其作用域,即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局 變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的 函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。


從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使范圍。


static 函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說(shuō)明為內(nèi)部函數(shù) (static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說(shuō)明和定義。對(duì) 于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說(shuō)明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件


static 全局變量與普通的全局變量有什么區(qū)別:static 全局變量只初使化一次,防止在其他文件單元中被 引用;


static 局部變量和普通局部變量有什么區(qū)別:static 局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;


static 函數(shù)與普通函數(shù)有什么區(qū)別:static 函數(shù)在存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝程序的局部變量存在于(堆棧)中,全局變量存在于 (靜態(tài)區(qū))中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于(堆)中。extern 全局變量、static 全局變量和 static 局部變量的生存期都是“永久”,區(qū)別只是可見(jiàn)域不同。extern 全局 變量可見(jiàn)區(qū)域是工程,static 全局變量可見(jiàn)區(qū)域是文件,而 static 局部變量的可見(jiàn)區(qū)域是塊。從代碼維護(hù)角度來(lái)看,對(duì)extern 變量的修改可能會(huì)影 響所有代碼,對(duì) static 全局變量的修改可能影響一個(gè)文件 中的代碼,而對(duì)static 變量的修改 可能影響一個(gè)塊的代 碼;因此在選擇變量類(lèi)型時(shí),優(yōu)先級(jí)是 static 局 部>static 全局>extern 全局。

      但它們有著共同的缺點(diǎn):使 用 了這些類(lèi)型變量的函數(shù)將是不可重入的,不是線程安全的。在 C/C++標(biāo)準(zhǔn)庫(kù)中有很多函數(shù)都使用了static 局部變量,目前的實(shí)現(xiàn)中都為它們提供了兩套代 碼,單線程版本 使用 static 變量而多線程版本使用“線程全局變量”,比如rand,strtok等。 一個(gè)進(jìn)程可用內(nèi)存空間為4G,可分在存放靜態(tài)數(shù)據(jù),代碼,系統(tǒng)內(nèi)存,堆,棧等。.活動(dòng)記錄一般存放調(diào)用參數(shù)、返回地址等內(nèi)容。堆和棧最大的區(qū)別在于 堆是由低地址向 高地址分配內(nèi)存,而棧是由高向低。全局和靜態(tài)數(shù)據(jù)存放在全局?jǐn)?shù)據(jù)區(qū),其余的在棧中,用malloc 或new分配的內(nèi)存位于堆中。一般來(lái)說(shuō)棧在低地址,堆位于高地址

關(guān)于Static局部變量與全局變量的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前題目:Static局部變量與全局變量的區(qū)別是什么
路徑分享:http://bm7419.com/article16/gejogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航、全網(wǎng)營(yíng)銷(xiāo)推廣動(dòng)態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)