訂閱
糾錯(cuò)
加入自媒體

關(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ù)


<上一頁(yè)  1  2  3  
聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

    人工智能 獵頭職位 更多
    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)