谁能帮我解释下程序

来源:百度知道 编辑:UC知道 时间:2024/05/03 05:48:07
fun(int a)
{
int b=0;
static int c=0;
b++;
c=c+b;
return(a+b+c);
}
main()
{
int a=2,i;
for(i=0;i<3;i++)
printf("%d\n",fun(a)):

输出结果为什么是:
4
5
6
谁能帮我解释一下啊,关于静态变量的
能具体解释下4,5,6是怎么来的吗??

每一次都是把a=2传给fun()

然后返回a+b+c

第一次最初的时候a=2,b=0,c=0. 其中c是静态变量...

b++使到b=1
c=c+b使到c=1

所以a+b+c=4

第二次最初的时候a=2,b=0,c=1. (因为c是静态变量,所以保留原值)

b++使到b=1
c=c+b使到c=2

所以a+b+c=5

第三次最初的时候a=2,b=0,c=1. (因为c是静态变量,所以保留原值)

b++使到b=1
c=c+b使到c=3

所以a+b+c=6

for(i=0;i<3;i++)
printf("%d\n",fun(a)):

当i=0时 fun(a)即fun(2)=a+b+c,a=2,b=1,c=1 所以为4
因为c是静态变量,所以值是累加的,即第一次调用为1,第二次为2,第三次为3
当i=1时 fun(a)即fun(2)=a+b+c,a=2,b=1,c=2 所以为5
当i=1时 fun(a)即fun(2)=a+b+c,a=2,b=1,c=3 所以为6

静态变量只初始化一次,在main函数之前就做好了,每次执行函数的时候b都是1,C是上次执行的结果,因为c不再初始化了,a每次加1,所以结果就是4 5 6

静态变量就是值不会消失的变量呗
三次循环都是fun(2),
但C的值逐次加一的,分别是1,2,3
则:2+1+1=4;2+1+2=5;2+1+3=6
不知这样你理解了没