static
靜態(tài)局部變量使用static修飾符定義,即使在聲明時(shí)未賦初值,編譯器也會(huì)把它初始化為0。且靜態(tài)局部變量存儲(chǔ)于進(jìn)程的全局?jǐn)?shù)據(jù)區(qū),即使函數(shù)返回,它的值也會(huì)保持不變。
#include <stdio.h>
void staticIndex()
{
int static p = 0;
p ++;
printf("%d ", p);
}
int main()
{
int i = 0;
for (i = 0; i < 10;)
{
staticIndex();
}
return 0;
}
總結(jié):
不加static修飾,函數(shù)或者代碼塊中的變量在函數(shù)或者代碼塊執(zhí)行完畢后就直接回收銷毀了,每次執(zhí)行都會(huì)重新分配內(nèi)存,每次都會(huì)銷毀。
加 static 修飾,函數(shù)或者代碼塊中的變量在函數(shù)或者代碼塊執(zhí)行第一次初始化分配內(nèi)存后,就算函數(shù)或者代碼塊執(zhí)行完畢,該變量也不會(huì)被回收 銷毀,直到程序結(jié)束 static 變量才會(huì)被回收。
當(dāng) static 作用于函數(shù)定義時(shí),或者用于代碼塊之外的變量聲明時(shí),static關(guān)鍵字用于修改標(biāo)識(shí)符的鏈接屬性。外部鏈接屬性變?yōu)閮?nèi)部鏈接屬性,標(biāo)識(shí)符的存儲(chǔ)類型和作用域不受影響。也就是說(shuō)變量或者函數(shù)只能在當(dāng)前源文件中訪問(wèn),不能在其他源文件中訪問(wèn)。
當(dāng)static 作用于代碼塊內(nèi)部的變量聲明時(shí),static關(guān)鍵字用于修改變量的存儲(chǔ)類型。從自動(dòng)變量變?yōu)殪o態(tài)變量,變量的屬性和作用域不受影響。