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,
*/
====求教大侠,为何相似的两个程序运行结果不一样呢?

c

3个回答

 区别在于static int n;
 static int n=0;是初始化,只初始化一次,也就是下一次f()执行的时候不执行这一句了。
 而
 m=n=0;是赋值,每次f()执行的时候,n都会变0
danielinbiti
danielinbiti 回复coco1312: static int n=0;这句静态变量初始化只执行一次。不是都执行。
大约 5 年之前 回复
u013421512
coco1312 求教程序的详解啊,还是不明白;你的意思是:第一个程序n=0在for循环都执行吗?那么那样的程序运行结果应该是5,5,5吧?为何是5,6,7,呢?
大约 5 年之前 回复

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

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

u013421512
coco1312 求教程序的详解啊,还是不明白;你的意思是:第一个程序n=0在for循环都执行吗?那么那样的程序运行结果应该是5,5,5吧?为何是5,6,7,呢?
大约 5 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐