C语言的静态变量

int a=4;
int f(int n)
{ static int a=3;
int t=0;
if(n%2) {static int a=4; t+=a++;}
else {static int a=5;t+=a++;}
return t+a++
}
main ()
{ int s=a,i;
for(i=0;i<3;i++)
s+=f(i);
printf("d%\n',s);
}
在每次的运算过程中的a是怎样变化的??
谢谢

static int a=3; //第一次调用函数时,a的值是3。第二次调用时,a的值是第一次调用结束时a保留的值。第三次调用时,a的值是第二次调用结束时a保留的值。依次类推。追问

其他a就没有作用?

追答

是的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-26
static 限定了a的作用范围,只在它定义的函数块内有效。static int a=4; t+=a++和static int a=5;t+=a++在退出判断是就会失效。追问

那可以吧具体的运算步骤大概写下?你的意思我懂,就是作用域和他们的生命期。但我不知道怎么算出结果出来,为什么就是29了?

追答

我郁闷了,算了几遍都比29大!静态变量二次定义,应该不执行,直接跳过的。你在看看参考书吧,我再琢磨琢磨。

追问

今天我算出来了,s=a=2,在if循环中,a的值是变化的,但是,由于int n=0,
所以f(0)=(t+a++)+(a++)=5+3=8,f(1))=(t+a++)+(a++)=4+4=8;f(2))=(t+a++)+(a++)=6+5=11
由于s=2,
所以s=s+f(0)+f(1)+f(2)=2+8+8+11=29;应该就是这样的吧,个人认为

第2个回答  2012-06-26
初始s = 4
s+=f(0) ===> f(0) = 5 + 3 = 8 ==> s = 4 + 8 = 12
s+=f(1) ===> f(1) = 4 + 4 = 8 ==> s = 12 + 8 = 20
s+=f(2) ===> f(2) = 6 + 5 = 11 ==> s = 20 + 11 = 31
最后的结果: s = 31
相似回答