//静态局部变量static申明,(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量auto(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句
#include"iostream.h"
int f(int a){
auto int b=0;
static int c=3;
b=b+1;
c=c+1;
cout<<"c="<<c<<endl;
return a+b+c;
}
int main(){
int a=2,i,c;
for (i=0;i<5;i++){
cout<<f(a)<<endl;
//cout<<"c="<<c<<endl;
//cout<<endl;
}return 0;
}
运行结果:

//利用静态局部变量来做阶乘
#include"iostream.h"
int fac(int);
int main(){
int i;
for (i=1;i<=5;i++){
cout<<i<<"!="<<fac(i)<<endl;
}return 0;
}
int fac(int n){
static int f=1;
f=f*n;
return f;
}