C语言中的static的作用~
static的三個作用
1.修飾局部變量
2.修飾全局變量
3.修飾函數
要想更好地理解static的作用,我們有必要介紹一下以下三個概念:
內存的棧區、堆區、靜態區
這就內存中的棧區、堆區、靜態區里面存放東西的大致情況。
然后我們再來看第一條:
一、static修飾的局部變量
?可以看到這里的結果是打印了10個1,有的人會產生疑問了,“這里為什么不是1~10”呢?因為每次test()進去后都要重新定義a=1。? 當a被創建出來時,它的作用域只在這個局部范圍內,當出了這個范圍就自動銷毀了。
如果用static修飾這里的int a=1會怎樣呢?
?我們可以看到,打印出了1~10的結果。因為用static修飾了局部變量a后,就延長了a的生命周期,使得它的作用域又局部范圍延展至整個工程。它本質上是改變了變量的存儲類型(位置)。
在看內存圖,局部變量進入棧區創建,出棧區銷毀,由棧區移至靜態區,并且它是在編譯期間放到靜態區的,不需要在執行過程中再開辟內存空間。
二、static修飾的全局變量
?我們創建了兩個源文件,在assd.c中創建了變量a,在test.c中用extern關鍵字聲明了這個外部符號,發現可以正常使用這個變量a。
而加上了static修飾這個全局變量a,
?
?
?
?這邊報錯了,這是因為編譯器沒有找到a。
全局變量,在其他源文件內部可以被使用是因為全局變量具有外部鏈接屬性,但被static修飾后,就變成了內部鏈接屬性,其它源文件就不能鏈接到這個靜態的全局變量了。
3.static修飾的函數
?
?
?static修飾函數和修飾全局變量異曲同工,也是因為函數有外部鏈接屬性,但被static修飾后變成了內部鏈接屬性。
總結
以上是生活随笔為你收集整理的C语言中的static的作用~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Genexus第5篇-WebPanel
- 下一篇: vue根据不同权限显示图片_vuex根据