關(guān)鍵字static的使用方法
對于普通的局部變量,每次調(diào)用的時(shí)候,都會在棧里初始化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 只初始化一次,每次訪問的值應(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里面可以用來修飾變量,也可以用來修飾函數(shù)。
先看用來修飾變量的時(shí)候。變量在c里面可分為存在全局?jǐn)?shù)據(jù)區(qū)、棧和堆里。
其實(shí)我們平時(shí)所說的堆棧是棧而不包含堆,不要弄混。
2. 定義靜態(tài)函數(shù)的好處:<1>其他文件中可以定義相同名字的函數(shù),不會發(fā)生沖突,不用擔(dān)心自己定義的函數(shù),是否會與其它文件中的函數(shù)同名,因?yàn)橥矝]有關(guān)系。<2> 靜態(tài)函數(shù)不能被其他文件所用。存儲說明符auto,register,extern,static,對應(yīng)兩種存儲期:自動存儲期和靜態(tài)存儲期。<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)用者的角度來統(tǒng)計(jì)比較困難。<4> 靜態(tài)函數(shù)會被自動分配在一個(gè)一直使用的存儲區(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文件訪問不到b文件中的靜態(tài)函數(shù)func。
四、一個(gè)關(guān)于static變量的巧妙的用法-偷梁換柱
如何定義一個(gè)和庫函數(shù)名一樣的函數(shù),并在函數(shù)中調(diào)用該庫函數(shù)?
關(guān)于該問題的答案,彭老師已經(jīng)已經(jīng)將分析過程發(fā)布于以下文章。
粉絲提問|c(diǎn)語言:如何定義一個(gè)和庫函數(shù)名一樣的函數(shù),并在函數(shù)中調(diào)用該庫函數(shù)
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動更多
-
即日-10.29立即報(bào)名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報(bào)名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報(bào)名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報(bào)名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價(jià)骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價(jià)拍賣
- 5 具身智能火了,但規(guī)模落地還需時(shí)間
- 6 國產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 7 三次錯(cuò)失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達(dá)的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實(shí)力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市