C语言两个类似的小程序求教区别

第一个程序如下:
#include
int a=2;
int f()
{
static int n;
int m;
m=n=0;
n++;a++;m++;
return n+m+a;
}
main()
{
_ int k;
for(k=0;k<3;k++)
printf("%d,",f());
printf("\n");_
}

程序运行结果:
5,6,7,

第二个程序如下:
#include
int a=2;
int f()
{
static int n=0;
int m=0;
n++;a++;m++;
return n+m+a;
}
main()
{
int k;
for(k=0;k<3;k++)
printf("%d,",f());
printf("\n");
}
/*
程序运行结果:
5,7,9,
*/
====求教大侠,为何相似的两个程序运行结果不一样呢?

 区别在于static int n;
 static int n=0;是初始化,只初始化一次,也就是下一次f()执行的时候不执行这一句了。
 而
 m=n=0;是赋值,每次f()执行的时候,n都会变0

运行结果不同,可能是因为这一句:static int n=0;
static 静态变量如果按上述定义,只会被初始化一次。下次再进入定义此静态变量的函数,不会再初始化,而是使用此变量已经存在的数值。

但如果改为:static int n;
int m;
m=n=0;
则每次都会执行 n=0 的操作。所以会产生异同!

static修饰的变量,只会被初始化一遍