關(guān)鍵字static的使用方法
對(duì)于普通的局部變量,每次調(diào)用的時(shí)候,都會(huì)在棧里初始化1次,
1 #include <stdio.h>
2
3
4 void func()
5 {
6 static int aa = 11;
7
8 printf("aa= %d ",aa++);
9
10 }
11
12 int main(int argc, char **argv)
13 {
14
15 func();
16 func();
17
18 return 0;
19 }
函數(shù)中靜態(tài)變量aa 只初始化一次,每次訪問(wèn)的值應(yīng)該是上一次調(diào)用到該函數(shù)時(shí)最后處理的結(jié)果,
三、static 函數(shù)
1. 概念:
在函數(shù)的返回類型前加上關(guān)鍵字static,函數(shù)就被定義成為靜態(tài)函數(shù)。
函數(shù)的定義和聲明默認(rèn)情況下是extern的,但靜態(tài)函數(shù)只是在聲明他的文件當(dāng)中可見,不能被其他文件所用。
static函數(shù)(也叫內(nèi)部函數(shù))只能被本文件中的函數(shù)調(diào)用,而不能被同一程序其它文件中的函數(shù)調(diào)用。
區(qū)別于一般的非靜態(tài)函數(shù)(外部函數(shù)) static在c里面可以用來(lái)修飾變量,也可以用來(lái)修飾函數(shù)。
先看用來(lái)修飾變量的時(shí)候。變量在c里面可分為存在全局?jǐn)?shù)據(jù)區(qū)、棧和堆里。
其實(shí)我們平時(shí)所說(shuō)的堆棧是棧而不包含堆,不要弄混。
2. 定義靜態(tài)函數(shù)的好處:<1>其他文件中可以定義相同名字的函數(shù),不會(huì)發(fā)生沖突,不用擔(dān)心自己定義的函數(shù),是否會(huì)與其它文件中的函數(shù)同名,因?yàn)橥矝]有關(guān)系。<2> 靜態(tài)函數(shù)不能被其他文件所用。存儲(chǔ)說(shuō)明符auto,register,extern,static,對(duì)應(yīng)兩種存儲(chǔ)期:自動(dòng)存儲(chǔ)期和靜態(tài)存儲(chǔ)期。<3> 統(tǒng)計(jì)次數(shù)功能聲明函數(shù)的一個(gè)局部變量,并設(shè)為static類型,作為一個(gè)計(jì)數(shù)器,這樣函數(shù)每次被調(diào)用的時(shí)候就可以進(jìn)行計(jì)數(shù)。這是統(tǒng)計(jì)函數(shù)被調(diào)用次數(shù)的最好的辦法,因?yàn)檫@個(gè)變量是和函數(shù)息息相關(guān)的,而函數(shù)可能在多個(gè)不同的地方被調(diào)用,所以從調(diào)用者的角度來(lái)統(tǒng)計(jì)比較困難。<4> 靜態(tài)函數(shù)會(huì)被自動(dòng)分配在一個(gè)一直使用的存儲(chǔ)區(qū),直到退出應(yīng)用程序?qū)嵗,避免了調(diào)用函數(shù)時(shí)壓棧出棧,速度快很多。舉例
a.c
1 #include <stdio.h>
2
3 void func();
4
5 int main(int argc, char **argv)
6 {
7
8 func();
9
10 return 0;
11 }
b.c
1 #include <stdio.h>
2
3 int b = 10;
4
5
6 static void func()
7 {
8 printf("in func b =%d",b);
9 }
編譯
由編譯結(jié)果可知,a文件訪問(wèn)不到b文件中的靜態(tài)函數(shù)func。
四、一個(gè)關(guān)于static變量的巧妙的用法-偷梁換柱
如何定義一個(gè)和庫(kù)函數(shù)名一樣的函數(shù),并在函數(shù)中調(diào)用該庫(kù)函數(shù)?
關(guān)于該問(wèn)題的答案,彭老師已經(jīng)已經(jīng)將分析過(guò)程發(fā)布于以下文章。
粉絲提問(wèn)|c(diǎn)語(yǔ)言:如何定義一個(gè)和庫(kù)函數(shù)名一樣的函數(shù),并在函數(shù)中調(diào)用該庫(kù)函數(shù)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
推薦專題