Static 變量和Static函數
系統
2277 0
static變量和static函數
static變量和static函數
<wbr>一、 static 變量</wbr>
<wbr> static變量大致分為三種用法<br>1. 用于局部變量中,成為靜態局部變量. 靜態局部變量有兩個用法,記憶功能和全局生存期. <br>2. 用于全局變量,主要作用是限制此全局變量被其他的文件調用. <br>3. 用于類中的成員.表示這個成員是屬于這個類但是不屬于類中任意特定對象<br><b><wbr>1. 靜態局部變量<br></wbr></b><wbr>靜態局部變量屬于靜態存儲方式,它具有以下特點:<br>(1)靜態局部變量在函數內定義它的生存期為整個源程序,但是其作用域仍與自動變量相同,只能在定義該變量的函數內使用該變量。退出該函數后, 盡管該變量還繼續存在,但不能使用它。<br><br>(2)允許對構造類靜態局部量賦初值例如數組,若未賦以初值,則由系統自動賦以0值。<br><br>(3)對基本類型的靜態局部變量若在說明時未賦以初值,則系統自動賦予0值。而對自動變量不賦初值,則其值是不定的。 根據靜態局部變量的特點, 可以看出它是一種生存期為整個源程序的量。雖然離開定義它的函數后不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用后留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮采用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態變量為宜。<br><br>舉例如下:<br>int fun() { <br>static int a = 1; <br>a++; <br>} <br>在第一次進入這個函數的時候,變量a被初始化為1!并接著自增1,以后每次進入該函數,a就不會被再次初始化了,僅進行自增1的操作;在static發明前,要達到同樣的功能,則只能使用全局變量: <br>int a = 1; <br>int fun() { <br>a++; <br>}<br><br><b><wbr>2.靜態全局變量</wbr></b><wbr><br>全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域, 限制了它的使用范圍。因此static 這個說明符在不同的地方所起的作用是不同的。<br><br><b><wbr>3.static的類成員變量</wbr></b><wbr><br>static關鍵字有兩種意思,你看上下文來判斷<br>a,表示變量是靜態存儲變量,表示變量存放在靜態存儲區.<br>b,表示該變量是內部連接(這種情況是指該變量不在任何{}之內,就象全局變量那樣,這時候加上static),也就是說在其它的.cpp文件中,該變量是不可見的(你不能用). <br><br><b><wbr>二、static 函數—— 內部函數和外部函數</wbr></b><wbr><br>當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分為內部函數和外部函數。<br>1 內部函數(又稱靜態函數)<br>如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱為內部函數。<br>定義一個內部函數,只需在函數類型前再加一個“static”關鍵字即可,如下所示:<br>static函數類型函數名(函數參數表)<br>{……}<br>關鍵字“static”,譯成中文就是“靜態的”,所以內部函數又稱靜態函數。但此處“static”的含義不是指存儲方式,而是指對函數的作用域僅局限于本文件。<br>使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。<br><br>2 外部函數<br>外部函數的定義:在定義函數時,如果沒有加關鍵字“static”,或冠以關鍵字“extern”,表示此函數是外部函數:<br>[extern]函數類型函數名(函數參數表)<br>{……}<br>調用外部函數時,需要對其進行說明:<br>[extern]函數類型函數名(參數類型表)[,函數名2(參數類型表2)……];<br>[案例]外部函數應用。<br>(1)文件mainf.c<br>main()<br>{extern void input(…),process(…),output(…);<br>input(…);process(…);output(…);<br>}<br>(2)文件subf1.c<br>……<br>externvoid input(……) /*定義外部函數*/<br>{……}<br>(3)文件subf2.c<br>……<br>externvoid process(……) /*定義外部函數*/<br>{……}<br>(4)文件subf3.c<br>……<br>extern void output(……)/*定義外部函數*/<br>{……}</wbr></wbr></wbr></wbr></wbr>
|
Static 變量和Static函數
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元