1.静态局部变量:若无显式赋初值,系统会自动赋值为0。
当再次调用该函数,则静态变量上次调用结束的值就作为本次的初值使用。
2.静态全局变量:本文件中的所有函数使用
静态局部变量和自动变量(当再次调用时,初始值还是程序上最开始的值,不用叠加)的区别
//无static ,自动变量
#include<stdio.h>
int main()
{
printf("%d\n",f(4));//6
printf("%d\n",f(4));//6
}
int f(int k)
{
int n=1;//局部变量
int s;
n++;
s=n+k;
return s;
}
//静态局部变量
#include<stdio.h>
int main()
{
printf("%d\n",f(4));//6
printf("%d\n",f(4));//7
}
int f(int k)
{
static int n=1;//静态局部变量
int s;
n++;
s=n+k;
return s;
}
//静态局部变量
#include<stdio.h>
int main()
{
printf("%d\n",f(4));//10
//要算2次,n=4和n=f(4)
printf("%d\n",f(f(4)));//26 =2*(2*4+3)+4
}
int f(int n)
{
static int k=1;
k++;
return 2*n+k;
}
#include<stdio.h>
int main()
{
printf("%d\n",f(3));//6
printf("%d\n",f(5)); //15
printf("%d\n",f(3)+f(5));//21
}
int f(int k)//k=3
{
static int i;//6 15 21 结果和自动变量相同
int sum=0;
for(i=1;i<=k;i++)
sum+=i;
return sum;
}
#include<stdio.h>
int main()
{
printf("%d\n",f(3));//6
printf("%d\n",f(5)); //9
printf("%d\n",f(3)+f(5));//0
}
int f(int k)//k=3
{//static设在i这里,故i是改变的对象
static int i=1;
int sum=0;
//第一次 1<i<=3
//第二次 3<i<=5
//第三次 5<i 而所求最大的为5,所以范围不符
for(;i<=k;i++)
sum+=i;
return sum;
}
#include<stdio.h>
int main()
{
printf("%d\n",f(3)+f(5));//15=6+9
printf("%d\n",f(6));//6
printf("%d\n",f(5)); //0
}
int f(int k)//k=3
{//static设在i这里,故i是改变的对象
static int i=1;
int sum=0;
//第一次 1<i<=3 + 3<i<=5
//第二次 5<i<=6
//第三次
for(;i<=k;i++)
sum+=i;
return sum;
}