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

            導航

            <2006年9月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            統計

            常用鏈接

            留言簿(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 深邃者 閱讀(380) 評論(0)  編輯 收藏 引用

            亚洲国产精品无码成人片久久| 久久久青草青青国产亚洲免观| 久久久久综合国产欧美一区二区| 久久天天躁狠狠躁夜夜躁2014| 国内精品久久久久久久亚洲| 日韩va亚洲va欧美va久久| 精品久久久久一区二区三区| 久久久精品久久久久特色影视| 中文字幕精品久久久久人妻| 欧美一区二区三区久久综合| 天天久久狠狠色综合| 亚洲精品国产综合久久一线| 99久久精品国产高清一区二区 | 亚洲第一极品精品无码久久| 久久国产高潮流白浆免费观看| 久久久久无码精品国产app| 久久精品麻豆日日躁夜夜躁| 久久久久综合中文字幕| 精品国际久久久久999波多野 | 国产精品久久久久免费a∨| 久久99国产乱子伦精品免费| 无码任你躁久久久久久| 久久久中文字幕| 欧美丰满熟妇BBB久久久| 日日狠狠久久偷偷色综合免费| 亚洲国产精品一区二区久久| 嫩草伊人久久精品少妇AV| 欧美伊人久久大香线蕉综合| 亚洲国产精品无码久久青草| 99久久亚洲综合精品成人| 国产精品免费福利久久| 久久精品一本到99热免费| 亚洲国产另类久久久精品| 久久精品国产久精国产一老狼| 亚洲国产成人久久一区久久| 久久婷婷五月综合色99啪ak| 久久99精品久久久久久秒播| 久久久久亚洲av成人无码电影| 国产精品内射久久久久欢欢| 国产成人综合久久精品尤物| 国内精品久久久久久久久电影网 |