天天看點

C語言關鍵字(3)static

static的作用:

1.修飾局部變量

2.修飾全局變量

3.修飾函數

修飾局部變量

 先看現象 

C語言關鍵字(3)static
C語言關鍵字(3)static

從現象我們可以看出,static 修飾的 的位址沒有被銷毀,否則不會列印出3 4 5...... 

我們證明一下,看看列印出來a的值是

C語言關鍵字(3)static

可以看出,a的值是确定值,其位址沒有被銷毀

那麼我們可以得到static改變的局部變量的生命周期

那麼作用域變了沒有?  -------   作用域沒有改變

C語言關鍵字(3)static

為什麼static可以改變局部變量的生命周期?

看一下C程式位址空間(詳細:​​https://blog.51cto.com/15132397/4291430​​)

C語言關鍵字(3)static

static修飾的局部變量,會在全局資料區或者靜态資料區開辟空間(編譯器的不同),

這就造成了static可以改變局部變量的生命周期。

為什麼函數和全局變量可以跨檔案通路

我們寫的大型項目一般都是多檔案項目,檔案與檔案之間一定要可以進行跨檔案通路,否則,我們不能跨檔案,那麼“互動”的成本就比較高。但總有些代碼需要隐藏,是以出現了static這個關鍵字。

修飾全局變量

static修飾的全局變量隻能在本檔案中内被通路,不能被外部檔案直接通路

未用static修飾

C語言關鍵字(3)static

 用static修飾

​ 全局變量擁有外部連結屬性,被static修飾後,外部連結屬性好像消失了

C語言關鍵字(3)static
修飾函數

static修飾的函數和全局變量一樣,隻能在本檔案中内被通路,不能被外部檔案直接通路

C語言關鍵字(3)static
C語言關鍵字(3)static

那被static修飾的函數如何可以間接通路

在static修飾的函數的檔案内,可以再寫一個函數調用被static修飾的函數,在外部檔案調用該函數,就可以間接調用static修飾的函數了

C語言關鍵字(3)static

總結:

繼續閱讀