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; }
你認(rèn)為輸出的結(jié)果是什么呢?
那為什么結(jié)果是2222222222呢
因為局部變量 a 進入這個范圍創(chuàng)建? 出了這個范圍銷毀? ?所以結(jié)果都是2
當(dāng)我們加上static 的結(jié)果又會是什么
那為什么加上 static 結(jié)果就不一樣了
我們研究一下static的使用原理
我們的內(nèi)存分為三大類
我們的局部變量放在棧區(qū)??
而static把a放在了靜態(tài)區(qū)? ?而在靜態(tài)區(qū)的變量 出了他的范圍是不銷毀的
我們對比一下 可能更加直觀
?所以 static 修飾局部變量的時候,其實改變的是局部變量得存儲位置
靜態(tài)得局部變量是放在靜態(tài)區(qū),放在靜態(tài)區(qū)的變量出了作用域是不會銷毀的,相當(dāng)于生命周期延長了。
?補充? ?變量的作用域是不變的,只是生命周期延長了
2. static 可以修飾全局變量
我們再創(chuàng)建一個源文件?
? ?全局變量的作用域是整個工程
如果我們想引用另一個源文件的函數(shù)? ?? 這里我們不得不說 extern 這個關(guān)鍵字
如圖
? static 可以修飾全局變量? 如果我們再全局變量前 加上static會是什么結(jié)果呢
此時就會報錯??
一個全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾后外部鏈接屬性就變成了內(nèi)部鏈接屬性 只能在自己所在的源文件內(nèi)部使用不能在其他文件內(nèi)部使用
所以再次調(diào)試的時候就會報錯
那 static 修飾的全局變量的本質(zhì)是? 外部鏈接屬性發(fā)生改變? ?而不是他的作用域變小
static 修飾全局變量的意義是? 如果你定義了一個全局變量? 別人用 extern 就可以隨便使用??
如果你不想讓別人看? 就可以用static .?
3.static 可以修飾函數(shù)
我們用另一個源文件創(chuàng)建一個函數(shù)? 如圖
用 關(guān)鍵字extern 聲明后? 調(diào)試結(jié)果
這里我們在函數(shù)前加上static 又會是什么結(jié)果呢?
? 其實一個函數(shù)本身具有外部鏈接屬性? 被static修飾后 外部鏈接屬性變成了內(nèi)部鏈接屬性? 只能在源2.c 內(nèi)部使用 其他源文件無法使用? ? 使用上感覺作用域變小
我們可以發(fā)現(xiàn) static 修飾全局變量和修飾函數(shù)用法一樣? ?
總結(jié)
當(dāng)我們使用一個局部變量? 出了他的范圍 不希望他被銷毀下次進來之后還在 那我們就可以拿static 修飾?
當(dāng)我們希望一個全部變量 在他自己源文件使用 任意其他地方不想讓別人看到 也可以用static修飾
當(dāng)我們寫的函數(shù)只是自己用一下 不希望別人引用 則也可以用static修
到此這篇關(guān)于C語言中static的使用介紹的文章就介紹到這了,更多相關(guān)C語言static內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)父進程主動終止子進程的方法總結(jié)
一般的情況,子進程自己運行完后,執(zhí)行exit 或者return 后,父進程wait. waitpid收回子進程,但子進程是一個循環(huán)等待狀態(tài)不主動退出,父進程可以采用文中介紹的幾種方法,需要的朋友可以參考下2023-10-10Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫讀取/設(shè)置X軸的顯示區(qū)間
這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫讀取/設(shè)置X軸的顯示區(qū)間,需要的朋友可以參考下2020-03-03深入C/C++浮點數(shù)在內(nèi)存中的存儲方式詳解
本篇文章是對C/C++浮點數(shù)在內(nèi)存中的存儲方式進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05