今天遇到一个有关static的题目,到网上找半天没有理解static的用意,后来跟踪才搞明白。
int f(int n)
{
staticint a=3;
intt=0;
if(n%2)
{
staticint a=4;
t+=a++;
}
else
{
staticint a=5;
t+=a++;
}
returnt+a++;
}
这个函数里面的三个static搞得我一头雾水。原来它是把这个函数都分成了三个模块,if,else各自是一个模块,互不影响,然后if,else外面算一个模块:
模块一
if(n%2)
{
staticint a=4;
t+=a++;
}
模块二
else
{
staticint a=5;
t+=a++;
}
模块三
int f(int n)
{
staticint a=3;
intt=0;
returnt+a++;
}
这里面的a值各自互不影响。
Static的作用,在第一次进入那个模块时对变量赋值,以后进入都不再进行赋值。即在第一次进入模块运行static这一行代码后,static立马就把这一行代码隐藏了,以后就不显现了。
完整代码:
#include "stdafx.h"
int a=2;
int f(int n)
{
staticint a=3;
intt=0;
if(n%2)
{
staticint a=4;
t+=a++;
}
else
{
staticint a=5;
t+=a++;
}
returnt+a++;
}
int main(int argc, char* argv[])
{
ints=a,i,x;
for(i=0;i<3;i++)
{
s+=f(i);
}
printf("%d",s);
return0;
}