關(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ù)的返回類(lèi)型前加上關(guān)鍵字static,函數(shù)就被定義成為靜態(tài)函數(shù)。
函數(shù)的定義和聲明默認(rèn)情況下是extern的,但靜態(tài)函數(shù)只是在聲明他的文件當(dāng)中可見(jiàn),不能被其他文件所用。
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)橥矝](méi)有關(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類(lèi)型,作為一個(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è)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車(chē)】汽車(chē)E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書(shū)】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專(zhuān)題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開(kāi)始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類(lèi)新物種登上歷史舞臺(tái)
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開(kāi)成長(zhǎng)空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?