怎么static有时赋初值,有时保留调用后的值?

来源:百度知道 编辑:UC知道 时间:2024/05/03 08:37:52
1.设有如下函数:
f(int a)
{int b=0;
static int c=3;
b++;c++
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是()
main()
{int a=2,i;
for(i=0;i<3;i++)printf("%d\n",f(a));
}
A.7
8
9
B.7
9
11
C.7
10
13
D.7
7
7
2.以下程序的输出结果是()
int f()
{static int i=0;
int s=1;
s+=i;i++;
return s;
}
main()
{int i,a=0;
for(i=0;i<5;i++)a+=f();
printf("%d\n",a);
}
A.20 B.24 C.25 D.15
怎么看起来static用法不一样?
请讲解一下怎么算的。

f(int a)
{int b=0;
static int c=3;
b++;c++
return(a+b+c);
}

====================================================================
这个f函数里面c是static局部变量 也可以这么理解:它一直活着 但你只能在f内看到它 而b是动态局部变量函数调用结束它就死了 static局部变量在C++中是规定只初始化一次 也就是你每次调用这个f函数它第一初始化为3以后都不再初始化 直接在3的基础上++ 而b会每次都要重新初始化

在main中调用f(a) 也就是f(2)return(a+b+c) 其中a永远是2 b永远是1
c第一次是4 第二次5 第三次是6 所以三次调用分别是7 8 9选A

===================================================================

int f()
{static int i=0;
int s=1;
s+=i;i++;
return s;
}
main()
{int i,a=0;
for(i=0;i<5;i++)a+=f();
printf("%d\n",a);
}

===========================================================
同理这个题目中 static i为静态变量一直不死 而main中也有一个i
但这个i是main里的变量与f中的不一样 main中的不是静态 f中的是静态的

这里调用f5次
第一次 s=1 i=1 a=1
第二次 s=2 i=2 a=3
第三次 s=3 i=3 a=6
第四次 s=4 i=4 a=10
第五次 s=5 i=5 a=15