靜態(tài)全局變量和全局變量有什么區(qū)別

靜態(tài)全局變量和全局變量有什么區(qū)別

全局變量是不顯式用static修飾的全局變量,但全局變量默認是動態(tài)的,作用域是整個工程,在一個文件內(nèi)定義的全局變量,在另一個文件中,通過extern 全局變量名的聲明,就可以使用全局變量。全局靜態(tài)變量是顯式用static修飾的全局變量,作用域是聲明此變量所在的文件,其他的文件即使用extern聲明也不能使用。

拓展資料
全局變量也稱為外部變量,它是在 函數(shù)外部定義的變量。

它不屬于哪一個 函數(shù),它屬于一個源程序文件。其作用域是從定義該變量的位置開始至源文件結束。
全局變量是在所有函數(shù)體的外部定義的,程序的所在部分(甚至其它文件中的代碼)都可以使用。全局變量不受作用域的影響(也就是說,全局變量的生命期一直到程序的結束)。

如果在一個文件中使用 extern關鍵字來聲明另一個文件中存在的全局變量,那么這個文件可以使用這個數(shù)據(jù)。
在全局變量前加一個 static,使該變量只在這個源文件中可用,稱之為全局靜態(tài)變量,全局靜態(tài)變量就是靜態(tài)全局變量。
在多文件組成的程序里,全局變量與全局靜態(tài)變量是不同的。

在某一層次聲明的變量的作用域就終止于該變量所在層次的末尾。**的區(qū)別是全局靜態(tài)變量使得該變量成為定義該變量的源文件所獨享。如果在一個文件中使用 extern關鍵字來聲明另一個文件中存在的靜態(tài)全局變量,這個文件也不能夠使用這個數(shù)據(jù)。

全局變量和靜態(tài)全局變量的區(qū)別

全局變量(外部變量)的說明之前再冠以static 就構成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當然也是靜態(tài)存儲方式。

這兩者在存儲方式上并無不同。

這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯誤。static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結果值;static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝。

全局變量和靜態(tài)全局變量有什么區(qū)別?

全局變量和靜態(tài)全局變量的區(qū)別在于作用域不同就是說一個項目里如果有多個源程序文件非靜態(tài)全局變量可以在所有源文件里調(diào)用靜態(tài)全局變量只能在本文件里調(diào)用,不允許在其他文件里調(diào)用//file1.cppstatic int a;//只能在file1.cpp里使用int b; //可以在file2.cpp里使用extern int c; //file2.cpp里的cint main(void){ a = 1; b = 2;}//file2.cppstatic int a;//只能在file2.cpp里使用int c; //可以在file1.cpp里使用extern int b; //file1.cpp里的bint fun(void){ c = a + b;}在多文件的項目開發(fā)中這樣可以避免由于變量重名造成的沖突

全局變量和靜態(tài)變量的區(qū)別

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

(2)靜態(tài)局部變量的生存期雖然為整個源程序,但是其作用域仍與自動變量相同,即只能在定義該變量的函數(shù)內(nèi)使用該變量。

退出該函數(shù)后, 盡管該變量還繼續(xù)存在,但不能使用它。 (3)對基本類型的靜態(tài)局部變量若在說明時未賦以初值,則系統(tǒng)自動賦予0值。而對自動變量不賦初值,則其值是不定的。 根據(jù)靜態(tài)局部變量的特點, 可以看出它是一種生存期為整個源文件的量。

雖然離開定義它的函數(shù)后不能使用,但如再次調(diào)用定義它的函數(shù)時,它又可繼續(xù)使用, 而且保存了前次被調(diào)用后留下的值。 因此百科,當多次調(diào)用一個函數(shù)且要求在調(diào)用之間保留某些變量的值時,可考慮采用靜態(tài)局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用(尤其是短名全局變量的變量名污染很嚴重),因此仍以采用局部靜態(tài)變量為宜。

簡單的說靜態(tài)局部變量與全局變量最明顯的區(qū)別就在于:全局變量在其定義后所有函數(shù)都能用,但是靜態(tài)局部變量只能在一個函數(shù)里面用。

全局變量和靜態(tài)變量有何異同

全局變量和靜態(tài)全局變量的區(qū)別在于作用域不同就是說一個項目里如果有多個源程序文件非靜態(tài)全局變量可以在所有源文件里調(diào)用靜態(tài)全局變量只能在本文件里調(diào)用,不允許在其他文件里調(diào)用//file1.cppstaticinta;//只能在file1.cpp里使用intb;//可以在file2.cpp里使用externintc;//file2.cpp里的cintmain(void){a=1;b=2;}//file2.cppstaticinta;//只能在file2.cpp里使用intc;//可以在file1.cpp里使用externintb;//file1.cpp里的bintfun(void){c=a+b;}在多文件的項目開發(fā)中這樣可以避免由于變量重名造成的沖突

全局變量跟靜態(tài)變量有什么不一樣

了解變量的關鍵在于“存在范圍”和“作用域”兩個概念?!按嬖诜秶敝复鎯ψ兞康膬?nèi)存空間在什么時間段內(nèi)存在。

全局變量和靜態(tài)變量都是在程序運行之始就產(chǎn)生,運行結束才銷毀,是一樣的。

“作用域”指變量在什么時間段內(nèi)可見,即可以被識別。全局變量的作用域是整個程序運行過程,靜態(tài)變量的作用域是聲名該變量的局部函數(shù)內(nèi)。在總程序內(nèi)和這個函數(shù)外,靜態(tài)變量雖然存在,但寫下變量名時編譯器卻不認識,這是區(qū)別。關鍵在于了解存在和可見的區(qū)別。