C語(yǔ)言 static變量
在局部變量之前加上關(guān)鍵字static,局部變量就被定義成為一個(gè)局部靜態(tài)變量。局部靜態(tài)變量和全局變量一樣存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。
1.靜態(tài)變量的定義形式
static數(shù)據(jù)類(lèi)型變量表列;
2.說(shuō)明
(1)靜態(tài)內(nèi)部變量屬于靜態(tài)存儲(chǔ)方式。在函數(shù)體內(nèi)定義的靜態(tài)變量,即便所在函數(shù)調(diào)用結(jié)束也不釋放。也就是說(shuō),靜態(tài)內(nèi)部變量在程序執(zhí)行期間始終存在,它的生存期為整個(gè)程序。不過(guò),其他函數(shù)是不能引用不屬于自己的靜態(tài)變量的。
(2)和auto變量一樣,靜態(tài)變量也允許初始化,初始化形式為:
static數(shù)據(jù)類(lèi)型變量1=初值,變量2=初值,…;
例如:
static long s=l;
(3)靜態(tài)變量如果定義了但沒(méi)有初始化,系統(tǒng)會(huì)對(duì)它自動(dòng)賦以"0"(整型和實(shí)型)或"\0"(字符型);且每次調(diào)用它們所在的函數(shù)時(shí),不再重新賦初值,只是保留上次調(diào)用結(jié)束時(shí)的值。
3.靜態(tài)全局變量
C語(yǔ)言中,也可以在一個(gè)全局變量的定義前面加static修飾,但此處的static與靜態(tài)局部變量的static的意義不一樣:
? static加在局部變量前,其含義是讓一個(gè)變量存儲(chǔ)在靜態(tài)存儲(chǔ)器中,保證函數(shù)執(zhí)行結(jié)束時(shí)不釋放該變量。
? static加在全局變量前的含義是告知編譯器,這個(gè)全局變量?jī)H在本文件中可用,不能被其他文件調(diào)用。
一個(gè)C語(yǔ)言源程序可以由多個(gè)源文件(.c)組成。在一個(gè)源文件中定義的全局變量(外部變量)可以被本程序中的每個(gè)源文件使用。但如果在全局變量的前面再加static標(biāo)識(shí)符,就構(gòu)成了靜態(tài)的全局變量,這樣的全局變量的作用域只在本文件內(nèi)部。
說(shuō)明:
即便是不加static修飾符,全局變量也是存儲(chǔ)在靜態(tài)數(shù)據(jù)區(qū),它的生命期是整個(gè)程序執(zhí)行期間。當(dāng)程序執(zhí)行完畢時(shí),全局變屋才會(huì)被釋放。當(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)全局變量可以避免其他模塊對(duì)全局變量的調(diào)用,防止出現(xiàn)錯(cuò)誤,同時(shí)也降低了模塊之間的耦合度。
繼續(xù)查找其他問(wèn)題的答案?
- 開(kāi)始學(xué)習(xí)
海報(bào)設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)字體設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)室內(nèi)設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)影視動(dòng)畫(huà)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)UI設(shè)計(jì)精品錄播課程2121次觀(guān)看
開(kāi)始學(xué)習(xí)
點(diǎn)擊加載更多評(píng)論>>