C語言 static變量
在局部變量之前加上關(guān)鍵字static,局部變量就被定義成為一個(gè)局部靜態(tài)變量。局部靜態(tài)變量和全局變量一樣存儲在靜態(tài)存儲區(qū)。
1.靜態(tài)變量的定義形式
static數(shù)據(jù)類型變量表列;
2.說明
(1)靜態(tài)內(nèi)部變量屬于靜態(tài)存儲方式。在函數(shù)體內(nèi)定義的靜態(tài)變量,即便所在函數(shù)調(diào)用結(jié)束也不釋放。也就是說,靜態(tài)內(nèi)部變量在程序執(zhí)行期間始終存在,它的生存期為整個(gè)程序。不過,其他函數(shù)是不能引用不屬于自己的靜態(tài)變量的。
(2)和auto變量一樣,靜態(tài)變量也允許初始化,初始化形式為:
static數(shù)據(jù)類型變量1=初值,變量2=初值,…;
例如:
static long s=l;
(3)靜態(tài)變量如果定義了但沒有初始化,系統(tǒng)會對它自動賦以"0"(整型和實(shí)型)或"\0"(字符型);且每次調(diào)用它們所在的函數(shù)時(shí),不再重新賦初值,只是保留上次調(diào)用結(jié)束時(shí)的值。
3.靜態(tài)全局變量
C語言中,也可以在一個(gè)全局變量的定義前面加static修飾,但此處的static與靜態(tài)局部變量的static的意義不一樣:
? static加在局部變量前,其含義是讓一個(gè)變量存儲在靜態(tài)存儲器中,保證函數(shù)執(zhí)行結(jié)束時(shí)不釋放該變量。
? static加在全局變量前的含義是告知編譯器,這個(gè)全局變量僅在本文件中可用,不能被其他文件調(diào)用。
一個(gè)C語言源程序可以由多個(gè)源文件(.c)組成。在一個(gè)源文件中定義的全局變量(外部變量)可以被本程序中的每個(gè)源文件使用。但如果在全局變量的前面再加static標(biāo)識符,就構(gòu)成了靜態(tài)的全局變量,這樣的全局變量的作用域只在本文件內(nèi)部。
說明:
即便是不加static修飾符,全局變量也是存儲在靜態(tài)數(shù)據(jù)區(qū),它的生命期是整個(gè)程序執(zhí)行期間。當(dāng)程序執(zhí)行完畢時(shí),全局變屋才會被釋放。當(dāng)全局變量加上static修飾符時(shí),只是限制了全局變量的作用域只局限在定義它的源文件內(nèi),程序中的其他源文件不能使用。例如:
file1.c中:
static int I;
float y;
void fun()
{
…
}
main()
}
…
}
file2.c
main()
{
extern float y;
…
Y-a+b;
…
}
程序中,file1中定義了兩個(gè)全局變量,其中i為靜態(tài)型,不能被別的文件所調(diào)用,y可以被其他文件調(diào)用,調(diào)用時(shí)要用extern進(jìn)行聲明,表明是一個(gè)外部變量。
靜態(tài)全局變量可以避免其他模塊對全局變量的調(diào)用,防止出現(xiàn)錯(cuò)誤,同時(shí)也降低了模塊之間的耦合度。
點(diǎn)擊加載更多評論>>