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