C語言中static的使用介紹
1.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 修飾局部變量的時候,其實改變的是局部變量得存儲位置
靜態得局部變量是放在靜態區,放在靜態區的變量出瞭作用域是不會銷毀的,相當於生命周期延長瞭。
補充 變量的作用域是不變的,隻是生命周期延長瞭
2. static 可以修飾全局變量
我們再創建一個源文件
全局變量的作用域是整個工程
如果我們想引用另一個源文件的函數 這裡我們不得不說 extern 這個關鍵字
如圖
static 可以修飾全局變量 如果我們再全局變量前 加上static會是什麼結果呢
此時就會報錯
一個全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾後外部鏈接屬性就變成瞭內部鏈接屬性 隻能在自己所在的源文件內部使用不能在其他文件內部使用
所以再次調試的時候就會報錯
那 static 修飾的全局變量的本質是 外部鏈接屬性發生改變 而不是他的作用域變小
static 修飾全局變量的意義是 如果你定義瞭一個全局變量 別人用 extern 就可以隨便使用
如果你不想讓別人看 就可以用static .
3.static 可以修飾函數
我們用另一個源文件創建一個函數 如圖
用 關鍵字extern 聲明後 調試結果
這裡我們在函數前加上static 又會是什麼結果呢
其實一個函數本身具有外部鏈接屬性 被static修飾後 外部鏈接屬性變成瞭內部鏈接屬性 隻能在源2.c 內部使用 其他源文件無法使用 使用上感覺作用域變小
我們可以發現 static 修飾全局變量和修飾函數用法一樣
總結
當我們使用一個局部變量 出瞭他的范圍 不希望他被銷毀下次進來之後還在 那我們就可以拿static 修飾
當我們希望一個全部變量 在他自己源文件使用 任意其他地方不想讓別人看到 也可以用static修飾
當我們寫的函數隻是自己用一下 不希望別人引用 則也可以用static修
到此這篇關於C語言中static的使用介紹的文章就介紹到這瞭,更多相關C語言static內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C/C++的關鍵字之static你瞭解嗎
- C語言中儲存類別與內存管理的深入理解
- C語言深度解剖篇之關鍵字以及補充內容
- c語言中static修飾函數的方法及代碼
- C/C++ extern和static的使用詳解