這篇文章主要介紹C語言中如何使用static,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
首先讓我看看這段代碼
#include<stdio.h> void test() { int a = 1; a = a + 1; printf("%d", a); } int main() { int i = 0; while (i < 10) { test(); i++; } return 0; }
你認為輸出的結果是什么呢?
那為什么結果是2222222222呢
因為局部變量 a 進入這個范圍創建 出了這個范圍銷毀 所以結果都是2
當我們加上static 的結果又會是什么
那為什么加上 static 結果就不一樣了
我們研究一下static的使用原理
我們的內存分為三大類
我們的局部變量放在棧區
而static把a放在了靜態區 而在靜態區的變量 出了他的范圍是不銷毀的
我們對比一下 可能更加直觀
所以 static 修飾局部變量的時候,其實改變的是局部變量得存儲位置
靜態得局部變量是放在靜態區,放在靜態區的變量出了作用域是不會銷毀的,相當于生命周期延長了。
補充 變量的作用域是不變的,只是生命周期延長了
我們再創建一個源文件
全局變量的作用域是整個工程
如果我們想引用另一個源文件的函數 這里我們不得不說 extern 這個關鍵字
如圖
static 可以修飾全局變量 如果我們再全局變量前 加上static會是什么結果呢
此時就會報錯
一個全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾后外部鏈接屬性就變成了內部鏈接屬性 只能在自己所在的源文件內部使用不能在其他文件內部使用
所以再次調試的時候就會報錯
那 static 修飾的全局變量的本質是 外部鏈接屬性發生改變 而不是他的作用域變小
static 修飾全局變量的意義是 如果你定義了一個全局變量 別人用 extern 就可以隨便使用
如果你不想讓別人看 就可以用static .
我們用另一個源文件創建一個函數 如圖
用 關鍵字extern 聲明后 調試結果
這里我們在函數前加上static 又會是什么結果呢
其實一個函數本身具有外部鏈接屬性 被static修飾后 外部鏈接屬性變成了內部鏈接屬性 只能在源2.c 內部使用 其他源文件無法使用 使用上感覺作用域變小
我們可以發現 static 修飾全局變量和修飾函數用法一樣
以上是“C語言中如何使用static”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。