999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

解析全局變量和局部變量在程序設計中的效應

2012-04-29 00:00:00王吉
China’s foreign Trade·下半月 2012年3期

【摘要】 全局變量不受作用域的影響,問題可以使用的(也就是說,全局變量的生命期一直到程序的結束)。局部變量出現在一個作用域內,它們是局限于一個函數的。

【關鍵詞】 局部變量 全局變量

全局變量是在所有函數體的外部定義的,程序的所在部分(甚至其它文件中的代碼)都可以使用。全局變量不受作用域的影響,問題可以使用的(也就是說,全局變量的生命期一直到程序的結束)。如果在一個文件中使用extern關鍵字來聲明另一個文件中存在的全局變量,那么這個文件可以使用這個數據。局部變量出現在一個作用域內,它們是局限于一個函數的。局部變量經常被稱為自動變量,因為它們在進入作用域時自動生成,離開作用域時自動消失。關鍵字auto可以顯式地說明這個問題,但是局部變量默認為auto,所以沒有必要聲明為auto。

關鍵字static有一些獨特的意義。通常,函數中定義局部變量在函數中作用域結束時消失。當再次調用這個函數時,會重新創建變量的存儲空間,其值會被重新初始化。如果想使局部變量的值在程序的整個生命期里仍然存在,我們可以定義函數的局部變量為static(靜態的),并給它一個初始化。初始化只在函數第一次調用時執行,函數調用之間變量的值保持不變,這種方式,函數可以“記住”函數調用之間的一些信息片斷。我們可能奇怪為什么不使用全局變量。static變量的優點是在函數范圍之外它是不可用的,所以它不可能被輕易改變。這會使錯誤局部化。外部變量extern告訴編譯器存在著一個變量和函數,即使編譯器在當前的文件中沒有看到它。這個變量或函數可能在一個文件或者在當前文件的后面定義。例如extern int i;編譯器會知道i肯定作為全局變量存在于某處。當編譯器看到變量i的定義時,并沒有看到別的聲明,所以知道它在文件的前面已經找到了同樣聲明的i 。

當我們同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個源文件,一個是a.c,另一個是main.c.

為什么在a.c中定義的全局變量a和函數msg能在main.c中使用?前面說過,所有未加static前綴的全局變量和函數都具有全局可見性,其它的源文件也能訪問。此例中,a是全局變量,msg是函數,并且都沒有加static前綴,因此對于另外的源文件main.c是可見的。

如果加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上 static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數和同名變量,而不必擔心命名沖突。Static可以用作函數和變量的前綴,對于函數來講,static的作用僅限于隱藏,而對于變量,static還有下面兩個作用。

存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量,只不過和 全局變量比起來,static可以控制變量的可見范圍,說到底static還是用來隱藏的。雖然這種用法不常見,按存儲區域分,全局變量、靜態全局變量和靜態局部變量都存放在內存的靜態存儲區域,局部變量存放在內存的棧區。按作用域分, 全局變量在整個工程文件內都有效;靜態全局變量只在定義它的文件內有效;靜態局部變量只在定義它的函數內有效,只是程序僅分配一次內存,函數返回后,該變量不會消失;局部變量在定義它的函數內有效,但是函數返回后失效。

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

從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域, 限制了它的使用范圍。static 函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件static全局變量與普通的全局變量有什么區別:static全局變量只初始化一次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值; static函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝。全局變量和靜態變量如果沒有手工初始化,則由編譯器初始化為0。局部變量的值不可知。

參考文獻:

[1]《C語言程序設計》 清華大學出版社2004年第一版.

(作者單位: 大慶職業學院計算機系)

主站蜘蛛池模板: 十八禁美女裸体网站| 亚洲欧美日韩高清综合678| 久久99国产视频| 国产十八禁在线观看免费| 亚洲精品国偷自产在线91正片| 午夜天堂视频| 欧美激情福利| 日韩欧美网址| 亚洲天堂啪啪| 永久天堂网Av| 亚洲女同欧美在线| 国产资源免费观看| 亚洲天堂色色人体| 18禁黄无遮挡网站| 伊人福利视频| 亚洲二区视频| 午夜激情婷婷| 2048国产精品原创综合在线| 福利在线一区| 思思99思思久久最新精品| 亚洲首页国产精品丝袜| 亚洲天堂网在线播放| 亚洲第一黄片大全| 呦系列视频一区二区三区| 亚洲第一香蕉视频| 亚洲一级毛片在线观| 亚洲网综合| 国产成人亚洲毛片| 国产美女精品一区二区| 日韩在线观看网站| 国产国产人成免费视频77777| 88av在线看| 伊人中文网| 久久人人爽人人爽人人片aV东京热| 鲁鲁鲁爽爽爽在线视频观看| 国内丰满少妇猛烈精品播| 91视频首页| 亚洲国产成人精品一二区| aⅴ免费在线观看| 欧美国产视频| 婷婷六月在线| 99尹人香蕉国产免费天天拍| 91精品国产91久久久久久三级| 国产成+人+综合+亚洲欧美| a欧美在线| 亚洲天堂日韩av电影| 九九热视频在线免费观看| 亚洲欧美h| 免费va国产在线观看| 日韩大片免费观看视频播放| 欧美一级在线看| 国产精品99久久久| 亚洲最新网址| 国产欧美在线观看精品一区污| 色偷偷男人的天堂亚洲av| 久久国产免费观看| 中文字幕在线日韩91| 亚洲V日韩V无码一区二区| 97国产成人无码精品久久久| 国产精品七七在线播放| 欧美亚洲欧美| 国产人前露出系列视频| 久久久受www免费人成| 综合久久久久久久综合网| 色精品视频| 久久免费精品琪琪| 国产丝袜啪啪| 中文无码日韩精品| 亚洲福利视频网址| 欧美中文字幕在线二区| 天堂岛国av无码免费无禁网站| 欧美国产日韩在线| 久久网欧美| 精品亚洲国产成人AV| 亚洲综合二区| 免费a在线观看播放| 免费人成视频在线观看网站| 91精品专区| 91在线无码精品秘九色APP| 欧美国产成人在线| 91精品国产自产在线老师啪l| 亚洲精品动漫在线观看|