• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

            Blog @ Blog

            當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

            常用鏈接

            統計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            用static聲明的函數和變量小結[轉]

            static聲明的函數和變量小結

            static 聲明的變量在C語言中有兩方面的特征:
              1)、變量會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區別。
              2)、變量用static告知編譯器,自己僅僅在變量的作用范圍內可見。這一點是它與全局變量的區別。
            Tips:
              A.若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態全局變量,以降低模塊間的耦合度;
              B.若全局變量僅由單個函數訪問,則可以將這個變量改為該函數的靜態局部變量,以降低模塊間的耦合度;
              C.設計和使用訪問動態全局變量、靜態全局變量、靜態局部變量的函數時,需要考慮重入問題;
                    D.
            如果我們需要一個可重入的函數,那么,我們一定要避免函數中使用static變量(這樣的函數被稱為:帶內部存儲器功能的的函數)
                    E.
            函數中必須要使用static變量情況:比如當某函數的返回值為指針類型時,則必須是static的局部變量的地址作為返回值,若為auto類型,則返回為錯指針。

            函數前加static使得函數成為靜態函數。但此處“static”的含義不是指存儲方式,而是指對函數的作用域僅局限于本文件(所以又稱內部函數)。使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名。

            擴展分析:術語static有著不尋常的歷史.起初,在C中引入關鍵字static是為了表示退出一個塊后仍然存在的局部變量。隨后,staticC中有了第二種含義:用來表示不能被其它文件訪問的全局變量和函數。為了避免引入新的關鍵字,所以仍使用static關鍵字來表示這第二種含義。最后,C++重用了這個關鍵字,并賦予它與前面不同的第三種含義:表示屬于一個類而不是屬于此類的任何特定對象的變量和函數(Java中此關鍵字的含義相同)。

            全局變量、靜態全局變量、靜態局部變量和局部變量的區別

            變量可以分為:全局變量、靜態全局變量、靜態局部變量和局部變量。
                     
            存儲區域分,全局變量、靜態全局變量和靜態局部變量都存放在內存的靜態存儲區域,局部變量存放在內存的棧區
                     
            作用域分,全局變量在整個工程文件內都有效;靜態全局變量只在定義它的文件內有效;靜態局部變量只在定義它的函數內有效,只是程序僅分配一次內存,函數返回后,該變量不會消失;局部變量在定義它的函數內有效,但是函數返回后失效。

            全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。

              從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域 限制了它的使用范圍。

              static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件

              static全局變量與普通的全局變量有什么區別:static全局變量只初始化一次,防止在其他文件單元中被引用;
              static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值;
                   static
            函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
                   
            全局變量和靜態變量如果沒有手工初始化,則由編譯器初始化為0。局部變量的值不可知。

             

             

            posted on 2008-11-14 15:59 isabc 閱讀(1629) 評論(0)  編輯 收藏 引用 所屬分類: C++基礎

            廣告信息(免費廣告聯系)

            中文版MSDN:
            歡迎體驗

            久久99精品国产麻豆不卡| 午夜精品久久久久久影视riav| 人妻无码中文久久久久专区| 国产69精品久久久久9999APGF | 2020久久精品亚洲热综合一本| 伊人久久无码精品中文字幕| 久久久噜噜噜久久中文福利| 色偷偷888欧美精品久久久| 亚洲国产成人久久一区久久| 2021少妇久久久久久久久久| 国产成人精品综合久久久| 伊人精品久久久久7777| 国产成人精品久久亚洲高清不卡 | 亚洲狠狠久久综合一区77777 | 久久国产免费直播| 人妻无码αv中文字幕久久 | 久久精品国产亚洲一区二区| 久久天天躁夜夜躁狠狠| 9999国产精品欧美久久久久久| 久久精品国产亚洲AV香蕉| 久久精品成人免费观看97| 99久久精品免费观看国产| 无遮挡粉嫩小泬久久久久久久 | 青青草原综合久久大伊人导航| 狠狠色噜噜狠狠狠狠狠色综合久久 | 青青热久久国产久精品| 青青青国产精品国产精品久久久久 | 久久国产乱子伦精品免费强| 亚洲va久久久噜噜噜久久男同| 青青草原综合久久大伊人导航 | 久久激情五月丁香伊人| 精品久久久久久无码人妻蜜桃| 久久婷婷国产麻豆91天堂| 久久国产精品99精品国产987| 国产成人精品久久| 久久国产精品无码一区二区三区| 少妇久久久久久被弄高潮| 日日噜噜夜夜狠狠久久丁香五月 | 婷婷久久综合九色综合绿巨人| 欧美粉嫩小泬久久久久久久| 久久久久久A亚洲欧洲AV冫 |