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

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

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

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

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

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

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

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

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

這兩者在存儲(chǔ)方式上并無不同。

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

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

全局變量和靜態(tài)全局變量的區(qū)別在于作用域不同就是說一個(gè)項(xiàng)目里如果有多個(gè)源程序文件非靜態(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;}在多文件的項(xiàng)目開發(fā)中這樣可以避免由于變量重名造成的沖突

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

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

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

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

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

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

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

全局變量和靜態(tài)全局變量的區(qū)別在于作用域不同就是說一個(gè)項(xiàng)目里如果有多個(gè)源程序文件非靜態(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;}在多文件的項(xiàng)目開發(fā)中這樣可以避免由于變量重名造成的沖突

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

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

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

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