• <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>

            road420

            導航

            <2007年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            關于局部與全局及靜態的關系

            1.在一個函數內部定義的變量是內部變量,它只在本函數范圍內有效,在此函數外面是不能使用這個變量,稱之為 "局部變量"。形式參數也屬于局部變量。在函數中的一個程序塊(如某個復合語句{...})定義的局部變量只在這個程序塊中有效,出了程序塊后就無效。
            2.有時希望函數中的局部變量的值在函數調用之后不消失而保留原值,在下一次該函數調用時該變量已有值,這時就該制定該局部變量為"靜態局部變量",用static加以說明。
            3.在函數之外定義的變量稱之為全局變量,全局變量可以為本文件中其他函數所共用,其有效范圍為:從定義變量開始到本源文件結束。如果在定義點之前的函數想應用該全局變量,則應該在該函數中使用關鍵字 extern作外部變量說明,表示該變量在函數外部定義在函數內部可以使用它。如果在同一個源文件中,全局變量和局部變量同名,則在局部變量作用范圍內,全局變量不起作用。如果在其它文件中要引用該文件的全局變量,則需要在應用它的文件中,用extern作說明。
            4.所謂靜態全局變量,就是希望某些全局變量只限定于被本文件引用,而不被其它文件引用,這時可以在定義全局變量的時候在前面加一個static說明,

            ?5 按存儲區域分,全局變量、靜態全局變量和靜態局部變量都存放在內存的靜態存儲區域,局部變量存放在內存的棧區。
            ??6?按作用域分,全局變量在整個工程文件內都有效;靜態全局變量只在定義它的文件內有效;靜態局部變量只在定義它的函數內有效,只是程序僅分配一次內存,函數返回后,該變量不會消失;局部變量在定義它的函數內有效,但是函數返回后失效。
            ??7?全局變量和靜態變量如果沒有手工初始化,則由編譯器初始化為0。局部變量的值不可知。
            8 舉個例子:
            int a;??/*全局*/
            static int b;??/*靜態全局*/
            int main()
            {
            }
            這段代碼如果是寫在file.c里面的,那么file2.c就不能調用b;
            但是file2.c中可以通過聲明外部變量extent a;
            9.靜態全局變量
              全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域, 限制了它
            的使用范圍。因此static 這個說明符在不同的地方所起的作用是不同的。應予以注意。
            10 代碼
            //test.cpp
            #i nclude?<iostream.h>
            extern?int?a;//變量聲明,不是定義
            static?int?b=5;
            void?func1()
            {
            ??cout<<b<<endl<<a<<endl;//結果為5
            }

            //main.cpp
            int?a;
            int?b=10;
            void?func2()
            {
            ??static?int?i;
            ??i++;
            ??cout<<i<<endl;
            }

            void?func1();

            void?main()
            {
            ??a=20;
            ??func1();
            ??func2();
            ??func2();
            }
            輸出結果為
            5
            20
            1
            2

            posted on 2006-09-10 12:11 深邃者 閱讀(389) 評論(0)  編輯 收藏 引用

            亚洲欧美成人综合久久久| 色综合久久综精品| 精品久久8x国产免费观看| 精品少妇人妻av无码久久| 国产叼嘿久久精品久久| 亚洲国产另类久久久精品| 91精品国产高清久久久久久91| 香蕉久久永久视频| 久久久久亚洲av无码专区喷水 | 人妻丰满AV无码久久不卡 | 国产香蕉久久精品综合网| 久久久久久无码Av成人影院| 91精品国产91热久久久久福利 | 久久精品国产亚洲77777| 久久天天躁狠狠躁夜夜2020| 99久久国产热无码精品免费| 欧美日韩久久中文字幕| 伊人丁香狠狠色综合久久| 久久av无码专区亚洲av桃花岛| 精品国产乱码久久久久久浪潮| 午夜天堂精品久久久久| 日韩中文久久| 久久免费视频一区| 亚洲午夜久久影院| 久久国产乱子精品免费女| 欧美熟妇另类久久久久久不卡| 久久综合视频网| 久久综合久久鬼色| 久久久精品久久久久特色影视| 91精品国产91久久久久福利| 国产偷久久久精品专区| 伊人久久大香线蕉av不变影院| 久久久久久无码国产精品中文字幕 | 久久久久久国产精品免费免费| 久久99国产精品二区不卡| 精品熟女少妇a∨免费久久| 国产精品久久久久久| 97久久天天综合色天天综合色hd| 久久精品国产亚洲av麻豆小说| 久久精品国产99久久久 | 9999国产精品欧美久久久久久|