用static聲明局部變量

  • 2017-09-08
  • 63

西安做網站static聲明局部變量

有時希望函數中的局部變量的值在函數調用結束後不消失而保留原值,這時就應該指定局部變量為“靜態局部變量”,用關鍵字static進行聲明。

【例8.15】考察靜態局部變量的值。

f(int a)

{auto b=0;

 static c=3;

 b=b+1;

 c=c+1;

 return(a+b+c);

}

main()

{int a=2,i;

 for(i=0;i<3;i++)

 printf("%d",f(a));

}

對靜態局部變量的說明:

靜態局部變量屬於靜態存儲類別,在靜態存儲區內分配存儲單元。在程序整個運行期間都不釋放。而自動變量(即動態局部變量)屬於動態存儲類別,占動態存儲空間,函數調用結束後即釋放。

靜態局部變量在編譯時賦初值,即隻賦初值一次;而對自動變量賦初值是在函數調用時進行,每調用一次函數重新給一次初值,相當於執行一次賦值語句。

如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。而對自動變量來說,如果不賦初值則它的值是一個不確定的值。

【例8.16】打印1到5的階乘值。

int fac(int n)

{static int f=1;

 f=f*n;

 return(f);

}

main()

{int i;

 for(i=1;i<=5;i++)

 printf("%d!=%d\n",i,fac(i));

}

西安做網站

用static聲明局部變量——西安做網站-www.xgktgj.com