位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C語(yǔ)言 > 問(wèn)題詳情

C語(yǔ)言 static變量

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-01

在局部變量之前加上關(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)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部