亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C語言入門之函數(5)

2019-11-17 05:23:59
字體:
來源:轉載
供稿:網友
  三、靜態變量

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

   1. 靜態局部變量

   在局部變量的說明前再加上static說明符就構成靜態局部變量。

   例如:

static int a,b;
static float array[5]={1,2,3,4,5};


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

   (1)靜態局部變量在函數內定義,但不象自動變量那樣,當調用時就存在,退出函數時就消失。靜態局部變量始終存在著,也就是說它的生存期為整個源程序。

   (2)靜態局部變量的生存期雖然為整個源程序,但是其作用域仍與自動變量相同,即只能在定義該變量的函數內使用該變量。退出該函數后, 盡管該變量還繼續存在,但不能使用它。

   (3)答應對構造類靜態局部量賦初值。在數組一章中,介紹數組初始化時已作過說明。若未賦以初值,則由系統自動賦以0值。

   (4)對基本類型的靜態局部變量若在說明時未賦以初值,則系統自動賦予0值。而對自動變量不賦初值,則其值是不定的。 根據靜態局部變量的特點, 可以看出它是一種生存期為整個源程序的量。雖然離開定義它的函數后不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用后留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮采用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態變量為宜。

   [例5.15]

main()
{
int i;
void f(); /*函數說明*/
for(i=1;i<=5;i++)
f(); /*函數調用*/
}
void f() /*函數定義*/
{
auto int j=0;
++j;
}

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

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為靜態變量,能在每次調用后保留其值并在下一次調用時繼續使用,所以輸出值成為累加的結果。讀者可自行分析其執行過程。

   2.靜態全局變量

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

   四、寄存器變量

   上述各類變量都存放在存儲器內, 因此當對一個變量頻繁讀寫時,必須要反復訪問內存儲器,從而花費大量的存取時間。 為此,C語言提供了另一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時,不需要訪問內存,而直接從寄存器中讀寫, 這樣可提高效率。寄存器變量的說明符是register。 對于循環次數較多的循環控制變量及循環體內反復使用的變量均可定義為寄存器變量。

   [例5.16]

求∑200i=1imain()

{
register i,s=0;
for(i=1;i<=200;i++)
s=s+i;
printf("s=%d/n",s);
}

   本程序循環200次,i和s都將頻繁使用,因此可定義為寄存器變量。對寄存器變量還要說明以下幾點:

   1. 只有局部自動變量和形式參數才可以定義為寄存器變量。因為寄存器變量屬于動態存儲方式。凡需要采用靜態存儲方式的量不能定義為寄存器變量。

   2. 在Turbo C,MS C等微機上使用的C語言中, 實際上是把寄存器變量當成自動變量處理的。因此速度并不能提高。 而在程序中答應使用寄存器變量只是為了與標準C保持一致。3. 即使能真正使用寄存器變量的機器,由于CPU 中寄存器的個數是有限的,因此使用寄存器變量的個數也是有限的。

   三、靜態變量

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

   1. 靜態局部變量

   在局部變量的說明前再加上static說明符就構成靜態局部變量。

   例如:

static int a,b;
static float array[5]={1,2,3,4,5};


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

   (1)靜態局部變量在函數內定義,但不象自動變量那樣,當調用時就存在,退出函數時就消失。靜態局部變量始終存在著,也就是說它的生存期為整個源程序。

   (2)靜態局部變量的生存期雖然為整個源程序,但是其作用域仍與自動變量相同,即只能在定義該變量的函數內使用該變量。退出該函數后, 盡管該變量還繼續存在,但不能使用它。

   (3)答應對構造類靜態局部量賦初值。在數組一章中,介紹數組初始化時已作過說明。若未賦以初值,則由系統自動賦以0值。

   (4)對基本類型的靜態局部變量若在說明時未賦以初值,則系統自動賦予0值。而對自動變量不賦初值,則其值是不定的。 根據靜態局部變量的特點, 可以看出它是一種生存期為整個源程序的量。雖然離開定義它的函數后不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用后留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮采用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態變量為宜。

   [例5.15]

main()
{
int i;
void f(); /*函數說明*/
for(i=1;i<=5;i++)
f(); /*函數調用*/
}
void f() /*函數定義*/
{
auto int j=0;
++j;
printf("%d/n",j);
}

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

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為靜態變量,能在每次調用后保留其值并在下一次調用時繼續使用,所以輸出值成為累加的結果。讀者可自行分析其執行過程。

   2.靜態全局變量

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

   四、寄存器變量

   上述各類變量都存放在存儲器內, 因此當對一個變量頻繁讀寫時,必須要反復訪問內存儲器,從而花費大量的存取時間。 為此,C語言提供了另一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時,不需要訪問內存,而直接從寄存器中讀寫, 這樣可提高效率。寄存器變量的說明符是register。 對于循環次數較多的循環控制變量及循環體內反復使用的變量均可定義為寄存器變量。

   [例5.16]

求∑200i=1imain()

{
register i,s=0;
for(i=1;i<=200;i++)
s=s+i;
printf("s=%d/n",s);
}

   本程序循環200次,i和s都將頻繁使用,因此可定義為寄存器變量。對寄存器變量還要說明以下幾點:

   1. 只有局部自動變量和形式參數才可以定義為寄存器變量。因為寄存器變量屬于動態存儲方式。凡需要采用靜態存儲方式的量不能定義為寄存器變量。

   2. 在Turbo C,MS C等微機上使用的C語言中, 實際上是把寄存器變量當成自動變量處理的。因此速度并不能提高。 而在程序中答應使用寄存器變量只是為了與標準C保持一致。3. 即使能真正使用寄存器變量的機器,由于CPU 中寄存器的個數是有限的,因此使用寄存器變量的個數也是有限的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产另类 国产精品国产免费| 国产精品亚洲自拍| 中文字幕v亚洲ⅴv天堂| 最近2019年日本中文免费字幕| 欧美大人香蕉在线| 91精品国产自产在线观看永久| 久久好看免费视频| 亚洲第五色综合网| 亚洲欧美另类自拍| 亚洲另类xxxx| 在线精品国产成人综合| 国产精品海角社区在线观看| 亚洲日本aⅴ片在线观看香蕉| 国产精品一区二区久久精品| 久久精品在线视频| 亚洲视频在线看| 亚洲成av人影院在线观看| 欧美大片网站在线观看| 97超级碰碰人国产在线观看| 亚洲成人教育av| 久久久久日韩精品久久久男男| 亚洲国产成人久久| 亚洲综合色av| 久久久亚洲天堂| 亚洲影视中文字幕| 日韩电影大全免费观看2023年上| 中文字幕日韩有码| 日韩最新在线视频| 91成人在线观看国产| 91精品在线影院| 久久久欧美一区二区| 欧美精品18videos性欧| 欧美国产精品va在线观看| 久久久日本电影| 亚洲欧美国产日韩中文字幕| 国模gogo一区二区大胆私拍| 国产精品综合网站| 国产视频精品va久久久久久| 精品视频—区二区三区免费| 欧美与黑人午夜性猛交久久久| 精品国产区一区二区三区在线观看| 精品高清一区二区三区| 美日韩精品免费观看视频| 国产成人激情视频| 国模私拍视频一区| 欧美在线视频网| 亚洲人成绝费网站色www| 精品国产欧美成人夜夜嗨| 深夜成人在线观看| 午夜剧场成人观在线视频免费观看| 欧美日韩精品在线| 精品国产电影一区| 日韩亚洲综合在线| 日本精品久久中文字幕佐佐木| 性日韩欧美在线视频| 国产经典一区二区| 亚洲人成亚洲人成在线观看| 最近中文字幕mv在线一区二区三区四区| 成人免费福利视频| 欧美精品在线免费| 97免费视频在线| 久久久极品av| 日韩av在线影院| 欧美午夜视频在线观看| 欧美成人免费观看| 91麻豆国产精品| 成人一区二区电影| 一区二区欧美久久| 欧美日韩在线观看视频小说| 国产日产欧美a一级在线| 中文字幕一区电影| 日韩在线小视频| 午夜精品久久久久久久男人的天堂| 奇米成人av国产一区二区三区| 一区二区欧美日韩视频| 亚洲女人天堂色在线7777| 国产精品视频永久免费播放| 欧美精品在线播放| 国产精品久久久亚洲| 九九九久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 亚洲电影免费在线观看| 欧美肥婆姓交大片| 中文字幕不卡在线视频极品| 亚洲成人久久电影| 久久精品国产亚洲一区二区| 欧美人交a欧美精品| 久久精品这里热有精品| 国产拍精品一二三| 国产亚洲欧美日韩精品| 国产极品精品在线观看| 欧美裸体xxxxx| 欧美日韩国产综合视频在线观看中文| 国产亚洲欧美日韩美女| www.日韩av.com| 色伦专区97中文字幕| 日本久久91av| 国产a∨精品一区二区三区不卡| 中文字幕av一区二区三区谷原希美| 亚洲午夜未满十八勿入免费观看全集| 久久国产天堂福利天堂| 中文字幕国产精品久久| 97视频在线观看免费| 亚洲人成自拍网站| 久热精品视频在线观看| 亚洲va电影大全| 欧美小视频在线观看| 欧美韩日一区二区| 欧美一区二粉嫩精品国产一线天| 久久久久久久久久久网站| 最近2019免费中文字幕视频三| 亚洲精美色品网站| 亚洲国产精品va在线看黑人动漫| 国产精品免费网站| 国产欧美精品日韩| 5566日本婷婷色中文字幕97| 成人黄色短视频在线观看| 日韩欧美第一页| 综合激情国产一区| 亚洲精品综合久久中文字幕| 91久久久久久久一区二区| 亚州欧美日韩中文视频| 中文字幕少妇一区二区三区| 成人国产精品免费视频| 日韩大片在线观看视频| 日韩av手机在线观看| 国产精品久久久久久久久男| 91精品久久久久久久久久久久久| 亚洲欧洲在线观看| 欧洲精品久久久| 北条麻妃99精品青青久久| 欧美日韩加勒比精品一区| 日本高清+成人网在线观看| 国产综合视频在线观看| 国产精品丝袜久久久久久不卡| 成人国产精品免费视频| 亚洲一级片在线看| 色悠久久久久综合先锋影音下载| 国产精品成人国产乱一区| 国产精品第8页| 中文字幕精品视频| 中文字幕av一区二区| 91av在线网站| 国产一级揄自揄精品视频| 精品欧美国产一区二区三区| 国外成人免费在线播放| 久久国产精品电影| 夜夜嗨av色一区二区不卡| 69久久夜色精品国产69| 国产精品久久久精品| 日韩成人在线视频观看| 欧美日韩中文字幕在线视频| 成人美女免费网站视频| 欧美激情乱人伦一区| 欧美中文字幕在线| 精品成人国产在线观看男人呻吟| 亚州国产精品久久久| 国产成人综合一区二区三区| 日韩视频精品在线| 91久久精品美女| 在线精品视频视频中文字幕| 国产亚洲综合久久| 久久精品一区中文字幕| 日本免费在线精品|