亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
      全國  |             |          |          |          |          |         
        當前位置:計算機等級 > 二級考試 > C語言程序設(shè)計 > C語言輔導(dǎo) > 文章內(nèi)容
        

      全國計算機等級考試二級C語言入門教程(81)

      中華IT學(xué)院   【 】  [ 2016年4月27日 ]

      靜態(tài)變量

      靜態(tài)變量的類型說明符是static。靜態(tài)變量當然是屬于靜態(tài)存儲方式,但是屬于靜態(tài)存儲方式的量不一定就是
      靜態(tài)變量, 例如外部變量雖屬于靜態(tài)存儲方式,但不一定是靜態(tài)變量,必須由 static加以定義后才能成為靜態(tài)外部
      變量,或稱靜態(tài)全局變量。 對于自動變量,前面已經(jīng)介紹它屬于動態(tài)存儲方式。 但是也可以用 static定義它為靜態(tài)
      自動變量,或稱靜態(tài)局部變量,從而成為靜態(tài)存儲方式。
      由此看來, 一個變量可由 static進行再說明,并改變其原有的存儲方式。

      靜態(tài)局部變量
      在局部變量的說明前再加上 static說明符就構(gòu)成靜態(tài)局部變量。
      例如:
      static int a,b;
      static float array[5]={1,2,3,4,5};

      靜態(tài)局部變量屬于靜態(tài)存儲方式,它具有以下特點:


      (1)靜態(tài)局部變量在函數(shù)內(nèi)定義,但不象自動變量那樣,當調(diào)用時就存在,退出函數(shù)時就消失。靜態(tài)局部變量始終存在
      著,也就是說它的生存期為整個源程序。
      (2)靜態(tài)局部變量的生存期雖然為整個源程序,但是其作用域仍與自動變量相同,即只能在定義該變量的函數(shù)內(nèi)使用該
      變量。退出該函數(shù)后, 盡管該變量還繼續(xù)存在,但不能使用它。
      (3)允許對構(gòu)造類靜態(tài)局部量賦初值。在數(shù)組一章中,介紹數(shù)組初始化時已作過說明。若未賦以初值,則由系統(tǒng)自動賦
      以0值。
      (4)對基本類型的靜態(tài)局部變量若在說明時未賦以初值,則系統(tǒng)自動賦予 0值。而對自動變量不賦初值,則其值是不定
      的。 根據(jù)靜態(tài)局部變量的特點, 可以看出它是一種生存期為整個源程序的量。雖然離開定義它的函數(shù)后不能使用,
      但如再次調(diào)用定義它的函數(shù)時,它又可繼續(xù)使用, 而且保存了前次被調(diào)用后留下的值。 因此,當多次調(diào)用一個函數(shù)
      且要求在調(diào)用之間保留某些變量的值時,可考慮采用靜態(tài)局部變量。雖然用全局變量也可以達到上述目的,但全局變
      量有時會造成意外的副作用,因此仍以采用局部靜態(tài)變量為宜。
      [例5.15]main()
      {
      int i;
      void f(); /*函數(shù)說明*/
      for(i=1;i<=5;i++)
      f(); /*函數(shù)調(diào)用*/
      }
      void f() /*函數(shù)定義*/
      {
      auto int j=0;
      ++j;
      printf("%d\n",j);
      }


      程序中定義了函數(shù)f,其中的變量j 說明為自動變量并賦予初始值為0。當main中多次調(diào)用f時,j均賦初值為
      0,故每次輸出值均為 1。現(xiàn)在把 j改為靜態(tài)局部變量,程序如下:

      main()
      {
      int i;
      void f();
      for (i=1;i<=5;i++)
      f();
      }
      void f()
      {
      static int j=0;
      ++j;
      printf("%d\n",j);
      }
      void f()
      {
      static int j=0;
      ++j;
      printf("%d/n",j);
      }


      由于 j為靜態(tài)變量,能在每次調(diào)用后保留其值并在下一次調(diào)用時繼續(xù)使用,所以輸出值成為累加的結(jié)果。讀者可自行
      分析其執(zhí)行過程。

      分享到:
      本文糾錯】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營業(yè)執(zhí)照