C++静态变量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:09:20
#include<iostream.h>
fun(int a){
int b=0;
static int c=3;
b++;c++;
return(a+b+c);}
main(){
int i,a=5;
for(i=0;i<3;i++)
cout<<i<<fun(a);
cout<<'\n';}
输出结果是010111212,
而另一题:#include<iostream.h>
int fun(int x[],int n){
static int sum=0,i;
for(i=0;i<n;i++) sum+=x[i];
return sum;}
main(){
int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);
cout<<s;}
输出结果是:60
我以为第二题的60是fun(a,5)=40;fun(b,4)=20;这样算fun(b,4)时sum应该是等于0,也就是说第二次访问函数时静态变量sum的值又被赋为0了;同样的道理第一题中静态变量c的值应该在后来每次的函数调用中被赋为初值0,但运行结果好像又没有变为0,请问我的理解那里有问题呢?
我这有段程序:
#include<iostream.h>
int f(int);
int main()
{int i;
for(i=0;i<5;i++)
cout<<f(i)<<' ';
return 0;}
int f(int i)
{static int k=1;
for(;i>0;i--)k+=i;
return k;}
这个里面的for循环比如:当i==4时,不是应该循环4次吗?就是k+4+3+2+1,照

首先 我觉得你第二题的 “以为”是错误的
应该是 15 和45
静态变量 你可以看成一个借给你笔记看。 但你借一次 你就给她一点东西。
所以 第一个15=1+2+3+4+5
45=15+6+7+8+9
所以等于60

楼下请你认真看下

恢复你的修复 请你认真看 for for 能循环几次呢?

#include<iostream.h>
fun(int a)
{
int b=0;
static int c=4; //静态变量每次调用后保留其值,并在下一次调用时继续使用,所以输出的值是累加的结果..
b++;c++;
cout<<b<<" "<<c<<endl; //输出b,c看他们的值变化,以后可以采用这种做法鉴定自己的想法
return(a+b+c);}
main()
{
int i,a=5;
for(i=0;i<3;i++)
cout<<i<<" "<<fun(a)<<endl;

}
我把你的程序修改了一下 这样你就能看明白了
你可以运行一下 编程环境 VC6.0
静态局部变量有以下特点:
该变量在全局数据区分配内存;
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
明白了static 的用法就知道怎么做了,看我上面的注释,记住那一点

第一题的结果是正确的的,如下
0 10
1 11
2 12
表示静态局部变量一直存在,并保存了上一次计算时的值