static的作用:
1.修飾局部變量
2.修飾全局變量
3.修飾函數
修飾局部變量
先看現象
從現象我們可以看出,static 修飾的 的位址沒有被銷毀,否則不會列印出3 4 5......
我們證明一下,看看列印出來a的值是
可以看出,a的值是确定值,其位址沒有被銷毀
那麼我們可以得到static改變的局部變量的生命周期
那麼作用域變了沒有? ------- 作用域沒有改變
為什麼static可以改變局部變量的生命周期?
看一下C程式位址空間(詳細:https://blog.51cto.com/15132397/4291430)
static修飾的局部變量,會在全局資料區或者靜态資料區開辟空間(編譯器的不同),
這就造成了static可以改變局部變量的生命周期。
為什麼函數和全局變量可以跨檔案通路
我們寫的大型項目一般都是多檔案項目,檔案與檔案之間一定要可以進行跨檔案通路,否則,我們不能跨檔案,那麼“互動”的成本就比較高。但總有些代碼需要隐藏,是以出現了static這個關鍵字。
修飾全局變量
static修飾的全局變量隻能在本檔案中内被通路,不能被外部檔案直接通路
未用static修飾
用static修飾
全局變量擁有外部連結屬性,被static修飾後,外部連結屬性好像消失了
修飾函數
static修飾的函數和全局變量一樣,隻能在本檔案中内被通路,不能被外部檔案直接通路
那被static修飾的函數如何可以間接通路
在static修飾的函數的檔案内,可以再寫一個函數調用被static修飾的函數,在外部檔案調用該函數,就可以間接調用static修飾的函數了